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 に答える