2

我正在像这样在表单上动态创建命令按钮:

procedure TForm1.cmdAddClick(Sender: TObject);

var   MenuButton : TButton;

begin   MenuButton := TButton.Create(self);

ButtonCount:=ButtonCount + 1;

用 MenuButton 做

 begin
   Top:= 10 + Height * ButtonCount;

   Left := 10; 
   Parent := Panel1; //Parent container for the buttons.
   OnClick := @YouClicked;
   Caption := 'Menu item ' + IntToStr(ButtonCount);

 end;

end;

运行上述几行几次后,我有许多按钮。

但是如何删除特定按钮?

我试过了

FreeAndNil (TButton(Sender));

但这似乎不起作用...

4

3 回答 3

3

该按钮也必须从层次结构中删除。由 TForm.RemoveComponent 完成的 IIRC?

于 2012-10-25T06:44:44.987 回答
2

从 YouClicked 事件内部销毁按钮似乎存在问题(使用 Sender)。

如果我将对象指针保留在按钮上,这在 YouClicked 之外有效:

TheMenuButton.Free;

按钮(控件)的析构函数处理父级中的清理。

于 2012-10-30T07:27:53.110 回答
0
procedure TForm1.FormCreate(Sender: TObject);
begin
  TestButton:=TButton.Create(Panel1);
  TestButton.SetBounds(10, 10, 80, 25);
  TestButton.OnClick:=@TestButtonClick;
  TestButton.Parent:=Panel1;
end;

procedure TForm1.TestButtonClick(Sender: TObject);
begin
  FreeAndNil(TestButton);  // Crash!
end;

procedure TForm1.AnotherButtonClick(Sender: TObject);
begin
  FreeAndNil(TestButton);  // Works...
end;
于 2012-10-30T07:59:39.707 回答