这可能是一个愚蠢的问题,但是我的大脑已经煮得足够熟了,我想我将使用我的“生命线”之一来查看是否可以从堆栈溢出的 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,而不要销毁-我现在不记得为什么。
布里
关于delphi - 删除表单上特定类别的所有组件(Delphi),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/539227/