动态创建TLatel控件,显示问题! ( 积分: 50 )

  • 主题发起人 主题发起人 hying95
  • 开始时间 开始时间
H

hying95

Unregistered / Unconfirmed
GUEST, unregistred user!
窗体上控件:button1,combobox1,panel1

当label的Transparent:=true;显示有问题,怎样解决?
procedure TForm1.Button1Click(Sender: TObject);
begin
_ini:=tinifile.Create('./program.ini');
combobox1.Clear;
_ini.ReadSections(combobox1.Items);
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
var
i: integer;
Lb: array of TLabel;
sLis: TStrings;
begin
sLis:=tstringlist.Create;
_ini.ReadSectionValues(combobox1.Text,sLis);
SetLength(Lb,sLis.Count);
for i := 0 to Length(Lb) - 1 do
Begin
Lb := Tlabel.Create(Form1);
with Lb do
begin
Parent := Panel1;
if i mod 2<>0 then
font.Color:=clFuchsia;
Left := 12;
Height := 24;
Width := 108;
Top := i * 24+50;
Transparent:=true;//注释这行没有问题,有这行代码caption值有变化时,有重影,上次显示内容还在,后显示重在上面,变花了,如何解决?
Caption :=sLis.Strings;
Show;
End;
end;
sLis.Free;
end;
 
update

没有灌水
 
还是一样!
 
caption控件.refresh,就ok了,
 
“上次显示内容还在”?
你都没有 Free 掉
Lb := Tlabel.Create(Form1);
这里创建的 TLabel ,当然它的 Caption 还在呢。
 
to shbjkl,hongfeng0727
你们的方法还是不行啊!
 
释放掉原先的Label就行了
procedure TForm1.ComboBox1Change(Sender: TObject);
var
i: integer;
Lb: array of TLabel;
sLis: TStrings;
begin
for i := 0 to Panel1.ControlCount - 1 do
if Panel1.Controls is TLabel then //如果Panel1上只有你动态创建的Label,不判断也行;如果还有其他不是动态创建的Label的话就要用其它方法判断,比如Tag
Panel1.Controls.Free;

sLis:=tstringlist.Create;
_ini.ReadSectionValues(combobox1.Text,sLis);
SetLength(Lb,sLis.Count);
for i := 0 to Length(Lb) - 1 do
Begin
Lb := Tlabel.Create(Form1);
with Lb do
begin
Parent := Panel1;
if i mod 2<>0 then
font.Color:=clFuchsia;
Left := 12;
Height := 24;
Width := 108;
Top := i * 24+50;
Transparent:=true;//注释这行没有问题,有这行代码caption值有变化时,有重影,上次显示内容还在,后显示重在上面,变花了,如何解决?
Caption :=sLis.Strings;
Show;
End;
end;
sLis.Free;
end;
 
to ANiDelphi
第一次可以,第二次当Combobox1.text改变时出错,存取违例
 
不好意思,没考虑到是Free操作,应该用降序,已在原帖修改
 
多谢你了,我上班时也试了。用降序可以!给你加分!
 
后退
顶部