![](/img/trans.png)
[英]Is there a way in Delphi to assign an anonymous method to a button event?
[英]Delphi: How to assign Click event to object's method?
我有一个菜单项,并且我正在尝试分配其OnClick
事件处理程序:
miFrobGizmo.OnClick := {something};
与几乎所有其他事件处理程序一样, OnClick
事件处理程序属性被定义为TNotifyEvent
方法类型:
property OnClick: TNotifyEvent
其中TNotifyEvent
为:
TNotifyEvent = procedure(Sender: TObject) of object;
我有一个对象,其方法与TNotifyEvent
签名匹配:
TAnimal = class(TObject)
public
procedure Frob(Sender: TObject);
end;
所以我认为我应该能够采用该对象的方法并将其分配给click事件处理程序:
var
Animal: TAnimal;
miFrobGizmo.OnClick := Animal.Frob;
除非我得到错误:
[Error]File.pas(1234): Not enough actual parameters
也许我正在放屁,但我认为我应该能够做到这一点。
我未能提及的一个细节是,具有匹配方法的对象正在通过接口公开该方法:
IAnimal = interface
procedure Frob(Sender: TObject);
end;
TAnimal = class(TInterfacedObject, IAnimal)
public
procedure Frob(Sender: TObject);
end;
var
Animal: IAnimal;
miFrobGizmo.OnClick := Animal.Frob;
你不能那样做。 它说的是“对象的过程”,而不是“接口的过程”。 如果您直接使用一个对象,它将使您做到这一点,但是由于您没有使用它,因此它不会认为您正在尝试分配事件处理程序,而是解析器尝试将您的代码视为方法调用。 然后,它会看到您的方法调用没有任何参数,但是该调用需要一个参数,因此它放弃并给您一条错误消息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.