動態創建組件問題
Var
Xpnl:Tpanel;
XbtnOkpnl:Tpanel;
XDBgrid:TDBGrid;
XbtnOk:Tbitbtn;
Xpnl:= Tpanel.create(self);
With Xpnl do
Begin
Parent:=form1;
Align:=alCLient;
End;
XbtnOkpnl:= Tpanel.create(self);
With XbtnOkpnl do
Begin
Parent:=Xpnl;
Height:=41;
Align:=alTop;
End;
XbtnOk:=Tbitbtn.create(self);
With XbtnOk do
Begin
Parent:= XbtnOkpnl;
Height:=40;
Width:=150;
Left:=0;
Top:=0;
Caption:=’資料匯出’;
onClick=CustomXbtnOk;
End;
XDBgrid:=TDBGrid.create(self);
With XDBgrid do
Begin
Parent:=Xpnl;
Align:=alClient;
Datasource;= //此處略
End;
Procedure CustomXbtnOk(Sender:Tobject)
Var
I:integer;
Begin
For i:=1 to Tpanel(Tbitbtn(sender).parent.parent).componentcount do
If Tpanel(Tbitbtn(sender).parent.parent).components[i-1] is TDBGrid then
…………………………………..
End;通過循環就是找不到類型為的TDBGrid組件,測試Xpnl的子組件數目顯示為零﹐怎么回事﹐我明明將XDBGrid的Parent屬性設置為Xpnl了。如何辦呢?還有﹐就是在動態創建組件的過程中﹐由于我沒有給組件起名字(因為我的程序中大量用動態創建的組件﹐在程序運行過程中要多次執行包含動態創建組件的代碼﹐一旦定了組件名字﹐在第二次執行時就會提示給定名字的組件已存在)﹐造成在程序運行中﹐想要引用動態創建的組件成為難題, 如在Procedure CustomXbtnOk(Sender:Tobject)中要引用之前創建的XDBgrid該怎么辦﹐代碼中動態創建的相同類型的組件有多個。有哪位大俠知道﹐請不吝賜教。
Var
Xpnl:Tpanel;
XbtnOkpnl:Tpanel;
XDBgrid:TDBGrid;
XbtnOk:Tbitbtn;
Xpnl:= Tpanel.create(self);
With Xpnl do
Begin
Parent:=form1;
Align:=alCLient;
End;
XbtnOkpnl:= Tpanel.create(self);
With XbtnOkpnl do
Begin
Parent:=Xpnl;
Height:=41;
Align:=alTop;
End;
XbtnOk:=Tbitbtn.create(self);
With XbtnOk do
Begin
Parent:= XbtnOkpnl;
Height:=40;
Width:=150;
Left:=0;
Top:=0;
Caption:=’資料匯出’;
onClick=CustomXbtnOk;
End;
XDBgrid:=TDBGrid.create(self);
With XDBgrid do
Begin
Parent:=Xpnl;
Align:=alClient;
Datasource;= //此處略
End;
Procedure CustomXbtnOk(Sender:Tobject)
Var
I:integer;
Begin
For i:=1 to Tpanel(Tbitbtn(sender).parent.parent).componentcount do
If Tpanel(Tbitbtn(sender).parent.parent).components[i-1] is TDBGrid then
…………………………………..
End;通過循環就是找不到類型為的TDBGrid組件,測試Xpnl的子組件數目顯示為零﹐怎么回事﹐我明明將XDBGrid的Parent屬性設置為Xpnl了。如何辦呢?還有﹐就是在動態創建組件的過程中﹐由于我沒有給組件起名字(因為我的程序中大量用動態創建的組件﹐在程序運行過程中要多次執行包含動態創建組件的代碼﹐一旦定了組件名字﹐在第二次執行時就會提示給定名字的組件已存在)﹐造成在程序運行中﹐想要引用動態創建的組件成為難題, 如在Procedure CustomXbtnOk(Sender:Tobject)中要引用之前創建的XDBgrid該怎么辦﹐代碼中動態創建的相同類型的組件有多個。有哪位大俠知道﹐請不吝賜教。
Tbitbtn(sender).parent.parent取出来是Xpnl但是你要注意你的对象在创建的时候都是 xxx.create(self); self 是指窗体
所以你所有动态创建的控件是属于窗体的子控件,而不是Xpnl
之后
if AControl is TWinControl then
begin
ListAdd(FWinControls, AControl);
ListAdd(FTabList, AControl);
end else
ListAdd(FControls, AControl);设置的时候会判断Xpnl是TWinControl还是其他的;
如果是TWinControl会把它保留在FWinControls里
否则会保存在FControls里,所以你可以这样去试试 For i:=1 to Tpanel(Tbitbtn(sender).parent.parent).ControlCount do
If Tpanel(Tbitbtn(sender).parent.parent).Controls[i-1] is TDBGrid then