关于动态生成控件,急!(100分)

  • 主题发起人 主题发起人 breezepine
  • 开始时间 开始时间
B

breezepine

Unregistered / Unconfirmed
GUEST, unregistred user!
在一个子窗体里面生成动态控件,代码如下:
procedure TForm2.Button1Click(Sender: TObject);
begin
lab:=Tlabel.Create(self);
lab.parent:=Form2;
lab.Caption:='lkjlk';
lab.Left:=200;
lab.Top:=100;
end;
结果毫无反应。

如果把lab.parent:=Form2; 改成lab.parent:=tabsheet1;结果可以实现。这是什么原因,请指教。
 
procedure TForm1.Button1Click(Sender: TObject);
var
lab:TLabel;
begin
lab:=Tlabel.Create(self);
lab.parent:=Form1;
lab.Caption:='测试创建控件';
lab.Left:=10;
lab.Top:=10;
end;
 
是不是你的Label被你的tabsheet1挡住了?
 
没错,应该是被挡住了 ,
你可以调整她的位置让她避开tabsheet
 
可能是被tabsheet1挡住了,要不这段代码本身没什么错误,在一个空工程中运行正确。
 
把 tabsheet 移到一边去或调整位置试试。但最好加上这一句:

lab.visible:=true;
 
把你的top和Left改为1先试试看。是不是不知跑到哪儿看不见了
 
不是挡住的原因。
如果父窗体是普通窗体,没有问题。可如果是子窗体就有问题,怎么解决?
 
var
lab:Tlabel;
begin
lab := TLabel.Create(form2);
lab.Parent := form2;
lab.Top := 10;
lab.Left := 10;
lab.Caption := '测试动态创建控件';
end;
 
没问题阿
吧你的源码发给我
留下你的QQ
 
还要加上name属性
 
lab.parent:=Self;
 
由你的程序看,Lab是在FORM2上一个按纽事件去动态创建,我试了一个例子,从FORM1上
创建FORM2,然后再从FROM2上创建LAB,结果正确。不知你的为什么一正确。你在创建过
程中是否出其他错误?如果可以,将FORM2的创建以及LAB控件的创建源代码全部贴出来,
共同研究。我认为你这段程序本身无错。
 
Form2:=TForm2.Create(Self);
lab:=Tlabel.Create(Form2);//注意这里的参数
lab.parent:=Form2;
lab.Caption:='lkjlk';
lab.Left:=200;
lab.Top:=100;
Form2.show;
self参数是把lab的owner改成整个Applicationg了.呵呵
 
我解决了这个问题。但是不明白根本的原因,请各位继续指教。

Form1是父窗体,Form2是子窗体。
Form1生成Form2用的代码是:
TForm2.create(self);

如果Form2是自动生成的,那么原来那段程序就没有问题。
但是如果Form2是运行过程中生成的,就出现了上述问题。

我把Form1生成Form2用的代码改成:Application.CreateForm(TForm2,Form2);
结果解决了上述问题。可是根本的原因是什么,我还是没有搞懂,请各位继续指教,不胜感激。
 
procedure TForm2.Button1Click(Sender: TObject);
var
lab : Tlabel;
begin
lab:=Tlabel.Create(self);
lab.parent:=Form2;
lab.Caption:='lkjlk';
lab.Left:=200;
lab.Top:=100;
end;

以上我试过,无误,你再看看你的Delphi 是不是有问题
 
下面的代码在一个新建的项目中测试通过

procedure TForm1.Button1Click(Sender: TObject);
begin
with Tlabel.Create(self) do begin
parent:=Form1;
Caption:='测试创建控件';
Left:=10;
Top:=10;
end;
end;
 
后退
顶部