setlength(Label1,n);
之后,Label1的下标是从[0]到[n-1],
而你的for i:=0 to n do里
当i = n时,label1[i]即label1[n]是无效的.

解决方案 »

  1.   

    var
    错误原因是由于数组越界引起的
    i,n:Integer;setlength(Label1,n);for i:=0 to n-1 do
    begin
      label1[i].top:=...
      label1[i].left:=...
      label1[i].caption:='asdfasd';
      label1[i].Parent:=self;
    end;循环里改为n-1,请测试上面代码。
      

  2.   

    for i:=0 to n-1 do
    begin
      label1[i].top:=...
      label1[i].left:=...
      label1[i].caption:='asdfasd';
      label1[i].Parent:=self;
    end;
      

  3.   


    是不是还没有动态创建啊?
    for i:=0 to n-1 do
    begin
      Label1[i]:=TLabel.create(self);
      ............
    end;
      

  4.   

    错误原因是由于数组越界引起的,你的数组设定为n个元素,而下标从0开始,则上限为n-1。所以你的代码中出现的 0 to n 是错误的
      

  5.   

    有两处错误:
    -->for i:=0 to n-1 do // 用n数组过界
      begin
    --> label1[i]:=TLabel.Create(self);// 在动态使用部件前应先创建
        label1[i].top:=i*16 + 8;
        label1[i].left:=8;
        label1[i].caption:='asdfasd';
        label1[i].Parent:=self;
        label1[i].Visible:=true;// 使部件可见
      end;
      

  6.   

    setlength(Label1,n);
    for i:=0 to n-1 do
    begin
      label1[i]:=tlabel.create(self);
      label1[i].parent:=self;
      label1[i].top:=...
      label1[i].left:=...
      label1[i].caption:='asdfasd';
    end;