在运行时从页面控件中删除选项卡

时间:2014-02-23 15:22:20

标签: delphi

根据上一个问题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;

但它声称i超出界限.....(访问违规)

1 个答案:

答案 0 :(得分:15)

当'i'最初为'0'时,您将删除Pages[0],其余的工作表会向下移动一个位置。那是在删除之后,第一张纸仍在Pages[0]。但是在下一次迭代中,您正在删除跳过第一页的Pages[1]。当您最终尝试删除不存在的页面时,您会收到错误。

一步一步,我们首先说你有三张纸,

  

[page0] [page1] [page2]

索引计数器为'0',删除Pages[0],剩下的两张表移动到开头,

  

[page0] [page1]

索引计数器为'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;