delphi – 在由所述对象调用的事件期间销毁对象

前端之家收集整理的这篇文章主要介绍了delphi – 在由所述对象调用的事件期间销毁对象前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个按钮.它的OnClick事件调用一个破坏按钮的过程,但随后“线程”想要返回OnClick事件,我得到一个访问冲突.

我完全难过了!

解决方法

在完成所有代码执行后,您需要销毁该按钮.执行此操作的标准方法是将一个用户定义的消息发布到表单,并为表单提供将解释它的消息方法.例如:
unit Unit1;

interface

uses
  Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls;

const
  WM_KILLCONTROL = WM_USER + 1;

type

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    procedure KillControl(var message: TMessage); message WM_KILLCONTROL;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  PostMessage(self.Handle,WM_KILLCONTROL,integer(Button1))
end;

procedure TForm1.KillControl(var message: TMessage);
var
  control: TControl;
begin
  control := TObject(message.LParam) as TControl;
  assert(control.Owner = self);
  control.Free;
end;

end.

这是有效的,因为消息被放入Windows消息队列,并且直到它之前的所有内容(包括按钮当前正在响应的Click消息)完成处理后才会出现.

猜你在找的Delphi相关文章