根据上一个问题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超出范围.....(访问冲突)
最佳答案
当'i'最初为'0'时,您将删除Pages[0]
,剩余的纸张向下移动一个位置。也就是说,删除后,第一张纸仍位于Pages[0]
。但是在下一次迭代中,您将跳过第一页删除Pages[1]
。最终当您尝试删除不存在的页面时,您会收到错误消息。
逐步说,首先,您有三张纸,
[page0] [page1] [page2]
索引计数器为'0',您删除Pages[0]
,其余两页移到开头,
[page0] [page1]
索引计数器为“ 1”,则删除第二个页面,即Pages[1]
。剩下的只有一页,
[page0]
索引计数器为“ 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;
关于delphi - 在运行时从页面控件中删除选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21970127/