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

Fra*_*anz 1 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;
Run Code Online (Sandbox Code Playgroud)

但它声称我是出界的.....(访问违规)

Ser*_*yuz 16

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

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

[第0页] [第1页] [第2页]

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

[第0页] [第1页]

索引计数器为'1',您删除第二页,即Pages[1].剩下的页面只有一个,

[页0/0]

索引计数器为'2',您删除第三页,即Pages[2].没有Pages[2],你得到错误.


一种解决方案是始终删除第一页:

 for I := 0  to  pagecontrol1.PageCount-1 do
 pagecontrol1.Pages[0].Free;
Run Code Online (Sandbox Code Playgroud)

另一个可以开始从最后一页删除,如TLama的评论中所述.

 for I := pagecontrol1.PageCount-1 downto 0 do
 pagecontrol1.Pages[i].Free;
Run Code Online (Sandbox Code Playgroud)