【问题标题】:Delphi: How to assign Click event to object's method?Delphi:如何将 Click 事件分配给对象的方法?
【发布时间】:2010-05-13 19:16:36
【问题描述】:

我有一个菜单项,我正在尝试分配它的 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;

跟进问题

If this won't work, what will?

【问题讨论】:

    标签: delphi events event-handling interface


    【解决方案1】:

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

    【讨论】:

    • 已接受。我想我的下一个 SO 问题将是“当我点击这个时如何调用这个方法”。
    • @Ian Boyd。我可以问一下,如果您接受了答案,为什么不投票(即,至少对您来说这是一个很好的答案)?
    猜你喜欢
    • 2022-06-10
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多