各位大虾,我想动态创建两个控件数组,用于显示两列Label,但运行时都有问题,前一个的Label列可以显示出来,但他们的Caption显示错误,本来应该显示“排放源1”、“排放源2”之类,可实际全部显示“排放源”。后面一Label列干脆就在窗体上显示不出来了。请大家帮忙。代码如下:m:=strtoint(edit1.text);
      for i:=1 to m do
        begin
          xiansi[i]:=tlabel.Create(self);
          xiansi[i].Parent:= source;
          xiansi[i].Width:= 54;
          xiansi[i].Caption:='排放源'+ inttostr(i);
          xiansi[i].AutoSize:= false;
          xiansi[i].Left:= 48;
          xiansi[i].Height:= 13;
          xiansi[i].Top:= 56+40*(i-1);
           
        end;n:=strtoint(edit2.text);
      for j:=1 to n do
        begin
          xiansi_2[j]:=tlabel.Create(self);
          xiansi_2[j].Parent:= control1;
          xiansi_2[j].Width:= 54;
          xiansi_2[j].Caption:='控制点'+ inttostr(j);
          xiansi_2[j].AutoSize:= false;
          xiansi_2[j].Left:= 440;
          xiansi_2[j].Height:= 13;
          xiansi_2[j].Top:= 56+40*(j-1);
          xiansi_2[j].Visible:=true;          
        end;

解决方案 »

  1.   

    据我所知:
      你这样写是不对的。数组只能存放数值,你要存的是控件,或者说是指向控件的指针。换成TList是绝对没有问题的
      

  2.   

    我试了一下,但有几个变量我不清楚你的定义,所以我自行定义了一下:
    source, control1 都变成 self;
    xiansi, xiansi_2 都定义成动态数组,同时在取得m和n后设置长度。
    结果没有问题。问题重点:
    1、字体原因,你将source和control1的字体设为宋体试试;
    2、control1可能不够宽,“xiansi_2[j].Left:= 440”可能超出其宽度。
      

  3.   

    agui:
    source, control1是两个panel控件的名字,应该没有问题,可以把你运行正常的代码帖出来吗?
      

  4.   

    我的源代码已经删了,临时project。你把 xiansi 和 xiansi_2 的定义贴出来,然后贴一下以下属性:
    source.Font.Name
    control1.Color
    control1.Font.Color
    control1.Width
      

  5.   

    把xiansi[i].AutoSize:= false;放到xiansi[i]:=tlabel.Create(self);下边就行了后一列显示不出来:xiansi_2[j].Left:= 440; 超出显示范围了