我试过一个脚本,我从一个网站运行 http://www.delphi-central.com/runtime.aspx并成功。当我在自己的OnClick处理程序中销毁按钮时,为什么我的程序崩溃?
private
{ Private declarations }
procedure CustomButtonClick(Sender: TObject);
procedure TForm1.AddNewButtonClick(Sender: TObject);
var
NewButton : TButton;
begin
NewButton := TButton.create(self);
with NewButton do
begin
Top := 30;
Width := 60;
Left := Width * (self.ControlCount-2);
Parent := self;
OnClick := CustomButtonClick;
Caption := 'Button '+ inttostr (self.ControlCount-2);
end; //With
end;
procedure TForm1.DeleteLastButtonClick(Sender: TObject);
begin
if Self.ControlCount>2 then
TButton (Controls[ControlCount-1]).destroy;
end;
procedure TForm1.CustomButtonClick(Sender: TObject);
begin
ShowMessage(TButton(Sender).caption + ' Pressed');
end;
但是,如果我改变的OnClick,
OnClick := CustomButtonClick; ==> OnClick := DeleteLastButtonClick;
它会产生一个错误信息。 这怎么可能发生......?
如果你想摧毁一座建筑物 - 你会**在**或** **以外的地方吗? – Alex 2010-07-29 13:06:21
让你的第一个问题变得不合时宜,可能会让你很沮丧。这个问题真的“不清楚或没用”吗? – mjn 2010-07-29 17:26:03
@约瑟夫:梅森的回答是对的,你可以看看TForm(在Forms.pas中)它是如何做类似的事情的;查找程序Release和CMRelease,以及常量CM_Release。 – 2010-07-29 18:58:46