根据上一个问题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)
| 归档时间: |
|
| 查看次数: |
6908 次 |
| 最近记录: |