gpt4 book ai didi

delphi - 删除窗体上某个类的所有组件(Delphi)

转载 作者:行者123 更新时间:2023-12-03 14:38:01 25 4
gpt4 key购买 nike

这可能是一个愚蠢的问题,但我的大脑已经足够成熟了,我想我将使用我的“生命线”之一来看看我是否可以从我的堆栈溢出 friend 那里得到一些帮助。 ;)

我需要删除主表单上出现的所有特定组件类型(其中一些位于面板或选项卡内,但全部位于同一表单上并由同一表单拥有)。这是我现在拥有的:

for i := 0 to frmMain.ComponentCount - 1 do  
begin
if frmMain.Components[i] is TMyClass then frmMain.Components[i].Destroy;
end;

问题是(我在编译它之前就知道会是这样),一旦我销毁组件,表单的组件列表就会重新索引,最终会超出范围。

解决这个问题的最佳方法是什么?我考虑过将“找到的”组件添加到一个独立的数组中,然后在这个循环之后遍历它以删除它们,我认为这会起作用......但这是最好的方法吗?

TIA

<小时/>

更新:

你们太棒了。谢谢。 :)

最佳答案

你几乎是对的。你的循环应该看起来像

for i := frmMain.ComponentCount - 1 downto 0 do
begin
if frmMain.Components[i] is TMyClass then
frmMain.Components[i].Free;
end;

这样,对函数“frmMain.ComponentCount”的调用就会在开始时完成,而不是再次完成。

您还应该像上面那样调用 Free,而不是 Destroy - 我现在不记得为什么。布里

关于delphi - 删除窗体上某个类的所有组件(Delphi),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/539227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com