根据上一个问题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超出界限.....(访问违规)
答案 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;