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???这样明白了吗?? -_-!
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???这样明白了吗?? -_-!
不是这样的
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;
你也可以把
var
Form1: TForm1;
p: array[0..1] of TPanel;
改成
var
Form1: TForm1;
p: array[1..4] of TPanel;
我刚试了你的demo,能理解你的意思,有点出乎意料,汗
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;
它就认为你是数组,就不会出错了
一、lxpbuaa(桂枝香在故国晚秋)是正确的,多谢老兄了。二、wonfon()的方法虽然创建出panel但我认为是不安全的,你如何取某一个panel进行处理呢???所以你的理解也应该是错误的,如果把Range Check打开,不管定义在全局还是局部都是错误的,兄台可以试试,呵呵。非常感谢各位的帮助!