组件制作的小问题……(50分)

  • 主题发起人 主题发起人 CoCo_
  • 开始时间 开始时间
C

CoCo_

Unregistered / Unconfirmed
GUEST, unregistred user!
做一个Label和ComboBox的混合控件,如下:
TCustomControl1 = class(TCustomControl)
private
FLabel:TLabel;
FComboBox:TComboBox;
……
在Create中想设置ComboBox的Items,总是报错:
constructor TCustomControl1.Create(AOwner: Tcomponent);
const Gap=5;
begin
inherited Create(Aowner);
height:=100;
width:=100;
FComboBox:=TComboBox.Create(Self);
FComboBox.left:=Flabel.left+55;
FComboBox.top:=Gap;
FcomboBox.Items.Create;
<font color=red>FcomboBox.Items.Add('所言及是');
FcomboBox.Items.Add('难置可否');
FcomboBox.Items.Add('全非如此');</font>
FComboBox.Parent:=Self;
FComboBox.Visible:=True;
end;
把红色的去掉就不报错了,编译的时候不报错,把控件放到面板里就报错,Why?
 
把红色的放到FComboBox.Parent:=Self; 下面一行去如何?
 
不行啦,报错:
Control " have not Parent Window...
:(
 
设Combobox的style属性试试!
 
去掉这行 FcomboBox.Items.Create
Combobox创建时本身就会Items.Create
 
去掉fcombobox.items.create行么
 
不能在Create方法中初始化TPersistent类。
你应该把Create中对FComboBox.Items的初始化去掉,并重载CreateWnd方法:
procedure TCustomControl1.CreateWnd;
begin
inherited;
if not (csLoading in ComponentState) then begin
FcomboBox.Items.Add('所言及是');
FcomboBox.Items.Add('难置可否');
FcomboBox.Items.Add('全非如此');
end;
end;

constructor TCustomControl1.Create(AOwner: TComponent);
const
Gap=5;
begin
inherited Create(AOwner);
Height := 100;
Width := 100;
FComboBox := TComboBox.Create(Self);
FComboBox.Left := Flabel.Left + 55;
FComboBox.Top := Gap;
FComboBox.Parent:=Self;
end;

 
只有TWinControl可以作为Parent,如果从TCustomControl继承
那么self就指的是从TCustomControl扩展的对象,档案不能指定为其他对象的Parent.
 
多人接受答案了。
 
后退
顶部