Delphi - 从TPanel删除运行时生成的按钮

dav*_*ash 4 delphi

我有几个TPanels在运行时填充按钮.但是,我用来从父面板中释放按钮的代码有时会产生访问冲突错误.

procedure TfrmTakeOrder.FreeItemButtons(buttons : array of TButton);
var
  cnt,i : integer;
begin

  for i := 0 to gridLayoutItems.ControlCount - 1 do
    begin
      buttons[i].Free;
      buttons[i] := nil;
    end;

end;
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点?请记住,其他面板也有按钮,我想有一个"本地化"释放与其他面板相关的按钮.

Mik*_*son 7

它看起来像你试图从TPanel中删除所有按钮,该面板只包含按钮.

试试这个:

while gridLayoutItems.ControlCount > 0 do
  gridLayoutItems.Controls[0].Free;
Run Code Online (Sandbox Code Playgroud)

  • 确保你放弃自己的按钮阵列.否则,您已引用阵列中已释放的内存,并在尝试使用它们时遇到访问冲突. (2认同)