【发布时间】:2011-08-26 14:32:11
【问题描述】:
我的自定义类女巫是从 TButton 派生的:
TLoginResultEvent = procedure (Sender: TObject; LoginResult: boolean) of object;
TLoginButton = class(TButton)
private
fLogin: TLoginChooser;
fOnClick: TLoginResultEvent;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure OnClickResult(Sender: TObject; LoginResult: boolean);
published
property Login: TLoginChooser read fLogin write fLogin;
property OnClick: TLoginResultEvent read fOnClick write fOnClick;
end;
在我添加的构造函数中:
constructor TLoginButton.Create(AOwner: TComponent);
begin
inherited;
fOnClick := OnClick;
OnClick := OnClickResult;
end;
但是当我点击按钮时它没有触发 OnClickResult,我做错了什么?是否可以“覆盖” OnClick 事件处理程序,或者我应该隐藏它并制作例如 OnResultClick 事件?
【问题讨论】:
-
>我做错了什么?它发生了,因为实际的 OnClick 事件处理程序是在您的构造函数完成执行后分配的。在加载方法中。但是按照下面的建议,覆盖 TButton 的 Click 事件要好得多,而不是使用事件处理程序。但是如果你想从组件中分配你的事件处理程序,你应该在 TComponent.Loaded 方法执行之后分配它。
-
@Aleksey 谢谢,很高兴知道
-
事件被使用你的类/组件的应用程序使用,而不是被它自己使用。
标签: delphi delphi-2010