gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:40:02 28 4
gpt4 key购买 nike

我有一个菜单项,并且我正在尝试分配其 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

也许我脑子有问题,但我想我应该能够做到这一点。

<小时/>

我没有提到的一个细节是,具有匹配方法的对象正在通过接口(interface)公开该方法:

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?

最佳答案

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

关于Delphi:如何将Click事件分配给对象的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2829608/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com