由於習慣於使用For循環,筆者在開發時遇到奇怪的問題。
在TTabset組件管理大量對象時使用了類似下面的語句
For I:=0 to aTabSet.Tabs.Count-1 do
begin
TObject(aTabSet.Tabs.Objects[I]).Free;
aTabSet.Tabs.Delete(I);
end;
乍一看沒問題,編譯,運行,結果出錯啦!
找了半天的原因,在發現,如此操作,Tabs.Count都已經發生了變化,I值已經超出Count的范圍,不出錯才怪!
后來改用了While循環,終於不出錯啦。
研究了一下,如果非要用For循環的話,可以這樣寫:
For I:=aTabSet.Tabs.Count-1 downto 0 do
begin
TObject(aTabSet.Tabs.Objects[I]).Free;
aTabSet.Tabs.Delete(I);
end;
