我正在研究delphi组件。 我一直在尝试访问自定义组件的指定父控件的onClick事件。通过指定,用户可以使用对象检查器作为属性来指定组件的父控件。父控件可以是同一表单上的任何控件组件。但是,因为我所做的所有父控件都是TControl的子类,并且TControl的onClick事件受到保护,所以我无法访问父控件的onclick事件。实际上,自定义组件就像位于父控件旁边的子组件,因此每当用户单击自定义组件时,如果存在click事件,我希望父控件的click事件发生。
当我运行此代码时,会发生类型转换异常。
procedure TSubCom.SetParentControl(const Value : TControl);
var
parentContLeft : Integer; //parent control's left + width
parentContTop : Integer; //parent control's top
begin
FParentControl := Value;
parentContLeft := FParentControl.Left + FParentControl.Width;
parentContTop := FParentControl.Top;
Left := parentContLeft - (Width div 2);
Top := parentContTop - (Height div 2);
Repaint;
end;
//TSubCom's onClick event is linked with its parent control's onClick event
procedure TSubCom.Click;
var
Parent: wrapClass;
begin
inherited;
if(FParentControl <> nil) then
begin
ShowMessage(FPArentControl.Name);
Parent := FParentControl as wrapClass;
ShowMessage('1');
if Assigned(Parent.OnClick) then
begin
Parent.OnClick(Self);
end;
// FParentControl as FParentControl.ClassType;
// if(FParentControl.OnClick <> nil) then
// FParentControl.OnClick;
end;
end;
答案 0 :(得分:4)
声明一个用于访问受保护成员的类,
对此类的父类进行类型转换,并且不使用OnClick
事件,而是使用Click
。
type
TControlAccess = class(TControl);
procedure TSubCom.Click;
begin
inherited Click;
if ParentControl <> nil then
TControlAccess(ParentControl).Click;
end;