这可能是一个愚蠢的问题,但是我的大脑已经煮得足够熟了,我想我将使用我的“生命线”之一来查看是否可以从堆栈溢出的 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/

10-12 15:25