procedure  TForm1.Button1Click(Sender:  TObject);  
var  
   p:  array[1..4]  of  TPanel;  
   i:  integer;  
begin  
   //showmessage(Edit1.Text);去掉注释再试试  
   for  i:=  0  to  4  do  
   begin  
       p[i]:=  TPanel.Create(nil);  
       p[i].Parent:=  Form1;  
       p[i].Top:=  10+i*50;  
       p[i].Left:=  10+i*50;  
   end;  
end;  
 
不知道是不是我没说清楚,我定义的panel数组只有4个:p[1],p[2],p[3],p[4]
如果注释掉showmessage一句程序报错;
但去掉注释后正常运行,而且生成5个Panel,我想问问那个p[0]到底什么时候定义的?为什么定义了4个而创建了5个panel???这样明白了吗??   -_-!

解决方案 »

  1.   

    我回答到你上个帖子的
    不是这样的
      p: array[1..4] of TPanel;
    是多少个数组,而不是多少个PANEL
    这样的话你就有4个数组了
    而没个数组可以存放
      for i:= 0 to 4 do
    个PANEL你不妨试试这个DEMO
    你就知道原因了
    var
      Form1: TForm1;
      p: array[0..1] of TPanel;
    implementation{$R *.dfm}procedure TForm1.Button2Click(Sender: TObject);
    var
      i,j: integer;
    begin
    for j:=low(p) to high(p) do
      for i:= 0 to 4 do
      begin
        p[j]:= TPanel.Create(nil);
        p[j].Parent:= Form1;
        p[j].Top:= 10+i*50;
        p[j].Left:=200*(j);
      end;
    end;
      

  2.   

    你先试试代码先,OK?
    你也可以把
    var
      Form1: TForm1;
      p: array[0..1] of TPanel;
    改成
    var
      Form1: TForm1;
      p: array[1..4] of TPanel;
      

  3.   

    for  i:=  1  to  4  do
      

  4.   

    >>wonfon() 
    我刚试了你的demo,能理解你的意思,有点出乎意料,汗
      

  5.   

    哈哈,发现了
    procedure TForm1.Button2Click(Sender: TObject);
    var
      p: array[1..4] of TPanel;
      i: integer;
    begin
      //showmessage(Edit1.Text);去掉注释再试试
      for i:= 0 to 4 do
      begin
        p[i]:= TPanel.Create(nil);
        p[i].Parent:= Form1;
        p[i].Top:= 10+i*50;
        p[i].Left:= 10+i*50;
      end;
    end;这样要出错的~~~~~~~越界哦
    但是把  p: array[1..4] of TPanel;
    放到
    var
      Form1: TForm1;
    p: array[1..4] of TPanel;
    它就认为你是数组,就不会出错了
      

  6.   

    总结如下:
    一、lxpbuaa(桂枝香在故国晚秋)是正确的,多谢老兄了。二、wonfon()的方法虽然创建出panel但我认为是不安全的,你如何取某一个panel进行处理呢???所以你的理解也应该是错误的,如果把Range Check打开,不管定义在全局还是局部都是错误的,兄台可以试试,呵呵。非常感谢各位的帮助!