我試過一個腳本,我從一個網站運行 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