delphi - 当我在自己的 OnClick 处理程序中销毁按钮时,为什么我的程序会崩溃?

标签 delphi delphi-2010 delphi-7

我尝试了我运行的网站上的脚本 http://www.delphi-central.com/runtime.aspx并成功。

<小时/>
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;

它将生成一条错误消息。 怎么会这样……???

最佳答案

当然,它会爆炸——这就是当你砍断你所坐的 Twig 时可能发生的情况。

您无法在由该控件生成的事件处理程序内终止该控件。

请注意,您正在使用的示例没有将 CustomButtonClick 指向删除例程!

关于delphi - 当我在自己的 OnClick 处理程序中销毁按钮时,为什么我的程序会崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3359552/

相关文章:

delphi - 将对象实例转换为另一个实例的引用?

delphi - 如何在 Delphi 7 中设置调试器参数?

delphi - 如何使用Delphi从某些exe文件中提取所有图标并将它们插入到其他exe文件中?

string - 为什么 TPageProducer 不删除字符串中的引号?

delphi - 如何解决 Delphi 2010 应用程序中未处理的 win32 异常?

带 Aero 玻璃的 Windows 版本的 Delphi 2010 按钮将文本变为白色

delphi - "One class per file"规则是否存在一些 Delphi 特定问题?

delphi - 如何在Delphi Firemonkey中改变TCylinder的颜色

xml - Delphi 有一个简单的文本差异单元吗?

delphi - 恢复 "lost"D2010 IDE