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

标签 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超出范围.....(访问冲突)

最佳答案

当'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/

相关文章:

delphi - Delphi 编辑器中的全局书签

php - 将PHP代码移植到Delphi代码中

delphi - 随机文件名

delphi - 了解共享内存

delphi - 如何使用SVN管理项目版本?

delphi - 奇怪的 Delphi 整数乘法行为

delphi - 只显示一次消息

java - 从 SOAP 请求中删除命名空间

delphi - 如何将RETRIEVAL_POINTERS_BUFFER结构翻译为Delphi?

delphi - 我怎样才能制作一个 "Surround"类型的Delphi模板?