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

3

我有一个菜单项,想要为它指定OnClick事件处理程序:

miFrobGizmo.OnClick := {something};
< p >像几乎所有其他事件处理程序一样,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;

后续问题

如果这个方法不起作用,还有什么方法可以使用?


1个回答

4

你不能那样做。它说的是“对象的过程”,而不是“接口的过程”。如果你直接使用一个对象,它会让你这样做,但由于你没有这样做,因此它不认为你试图分配事件处理程序,而是解析器尝试将你的代码视为方法调用。然后它发现你的方法调用没有任何参数,但是调用需要一个参数,所以它放弃并给出了错误消息。


已经被接受。我猜我的下一个 SO (Stack Overflow) 问题会是“当我点击时如何调用这个方法”。 - Ian Boyd
@Ian Boyd。请问为什么您没有给答案点赞,如果您接受了它(即使对您来说至少是一个好答案)? - Francesca

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接