2014-02-23 49 views
0

根據上一個問題TABS @ RUN TIME我在運行時創建了選項卡。 現在,我挨在運行時刪除選項卡上的問題,我對反函數的解決方案是這樣的在運行時從頁面控件中刪除選項卡

procedure TForm.DeleteAllTabs(sender : TObject); 
var i : Integer; 
begin 
    for I := 0 to pagecontrol1.PageCount-1 do 
    pagecontrol1.Pages[i].Destroy 
end; 

,但它聲稱,我是出界.....(訪問衝突)的

回答

13

當'i'最初爲'0'時,您正在刪除Pages[0],剩餘的紙張向下移動一個位置。即在刪除之後,第一張紙仍然在Pages[0]。但在下一次迭代中,您將刪除跳過第一頁的Pages[1]。當最終嘗試刪除不存在的頁面時,會出現錯誤。

一步一步來,讓我們一開始你有三張紙說,

[頁0] [第1頁] [第2頁]

索引計數器爲 '0',將刪除Pages[0],剩餘的兩個片材移動到開始,

[頁0] [第1頁]

索引計數器爲'1',您刪除第二頁,即Pages[1]。這裏只有一個剩餘頁,

[頁0]

指數計數器是 '​​2',刪除第三個頁面,這是Pages[2]。沒有Pages[2],您會收到錯誤消息。


一個解決方案是始終刪除第一頁:

for I := 0 to pagecontrol1.PageCount-1 do 
pagecontrol1.Pages[0].Free; 

另外一個可以開始從最後一頁刪除在TLama的評論說。

for I := pagecontrol1.PageCount-1 downto 0 do 
pagecontrol1.Pages[i].Free; 
相關問題