簡體   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