procedure TForm1.Button2Click(Sender: TObject);
var
   pan:   array of array of Tpanel;
    x,y,m,n:   integer;
begin
    m := strtoint(edit1.Text);  //行数
    n := strtoint(edit2.Text);  //列数
   SetLength(pan,m);
     for x := 1 to m do
      begin
            SetLength(pan[x],n);
            for y := 1 to n do
                  begin
                        pan[x,y]:=Tpanel.Create(self);
                        pan[x,y].parent:=Panel2;
                        pan[x,y].Left:=y*30;
                        pan[x,y].Top:=x*30;
                        pan[x,y].Height:=30;
                        pan[x,y].Width:=30;
                        pan[x,y].Caption:= inttostr(x)+ '_'+inttostr(y);
                        showmessage(pan[x,y].Caption);
                end;
    end;end;报错信息为:access violation at address 004056E9    Read of address  0000002E麻烦大家指正下!!!!

解决方案 »

  1.   

    for x := 1 to m do
      begin
      SetLength(pan[x],n);
      for y := 1 to n do改成for x := 0 to m-1 do
      begin
      SetLength(pan[x],n);
      for y := 0 to n-1 do
      

  2.   

    改为这样:
    for x := 0 to m - 1 do
    begin
      SetLength(pan[x],n);
      for y := 0 to n - 1 do
      begin
      end;
    end;
    你原来的写法导致数组越界