Delphi中有没有一种方法可以将匿名方法分配给按钮事件?

Delphi中有没有一种方法可以将匿名方法分配给按钮事件?,delphi,events,anonymous-function,Delphi,Events,Anonymous Function,我想知道在Delphi中是否有一种方法可以将匿名方法分配给表单控件事件 例如: Button1.OnClick := procedure (Sender: TObject) begin ShowMessage('') end; 当然,这给了我一个错误 [dcc32错误]Control.Controller.pas(51):E2009不兼容类型:“方法指针和常规过程” 这是因为该方法必须属于一个对象,但它将不再是匿名的 也许有一些解决办法这是不可能的。必须将事件处理程序设置为方法类型,而不是匿名

我想知道在Delphi中是否有一种方法可以将匿名方法分配给表单控件事件

例如:

Button1.OnClick := procedure (Sender: TObject) begin ShowMessage('') end;
当然,这给了我一个错误

[dcc32错误]Control.Controller.pas(51):E2009不兼容类型:“方法指针和常规过程”

这是因为该方法必须属于一个对象,但它将不再是匿名的


也许有一些解决办法

这是不可能的。必须将事件处理程序设置为方法类型,而不是匿名方法

您需要将匿名方法包装在方法中。实例方法(记录或类的)或类方法。例如:


匿名方法便于利用Closure第二个链接中的解决方案(
TNotifyEventWrapper
由Davlid Heffernan提供)是一个更好的解决方案!