繁体   English   中英

Delphi:如何将Click事件分配给对象的方法?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM