读书人

有关Parent,该怎么解决

发布时间: 2012-03-03 15:33:02 作者: rapoo

有关Parent
我想作这样一个控件:

在CoolBar上创建一个 ToolBar, 再在Toolbar上创建N个 SpeedButton

代码如下:

TcySpeedButton = Class(TSpeedButton)
Private
Public
Constructor Create(aOwner: TComponent); Override;
Destructor Destroy; Override;
end;

TcyCoolBar = Class(TCoolBar)
Private
ToolBar: TToolBar;
SpeedNew: TcySpeedButton;
SpeedSave: TcySpeedButton;
SpeedDel: TcySpeedButton;
SpeedPrint: TcySpeedButton;
SpeedClose: TcySpeedButton;
protected
public
constructor Create(aOwner: TComponent); Override;
destructor Destroy; override;
published

end;


constructor TcyCoolBar.Create(aOwner: TComponent);
begin
inherited;
Self.Height := 55;
ToolBar := TToolBar.Create(Self);
With ToolBar do
begin
ToolBar.Height := 52;
Parent := Self;

SpeedNew := TcySpeedButton.Create(nil);
With SpeedNew do
begin
Caption := '新增 ';
Glyph.LoadFromFile( 'D:\Work\BMP\5.bmp ');
Parent := ToolBar; //这儿有错!


end;
end;

end;

destructor TcyCoolBar.Destroy;
begin
if assigned(ToolBar) then
FreeAndNil(ToolBar);
inherited;
end;


{ TcySpeedButton }

constructor TcySpeedButton.Create(aOwner: TComponent);
begin
inherited;
Height := 50;
Width := 45;
Layout := blGlyphTop;

end;

destructor TcySpeedButton.Destroy;
begin

inherited;
end;

[解决办法]
parent 写 self 指得是他的父类CoolBar所产生的实例,你在这里写的时候类还没有具体实例化,不存在ToolBar这样的实例名称
[解决办法]
SpeedNew := TcySpeedButton.Create(CoolBar);
create的参数是ower,指的就是panrent。还有,动态创建的speedbutton默认是不可见的,还应该把visible设置成true。

读书人网 >.NET

热点推荐