报错:
………………raised exception class EAccessViolation with message………………
百思不得其解。
如果在CreateBtn的Begin下面,第一句写ShowMessage(IntToStr(i));的话,运行时往往到最后一个按钮时报上面的错误,而不是一开始就报错。如果不加ShowMessagep这句,是一开始就报错,运行不了。procedure TFormStuMain.Button1Click(Sender: TObject);
begin
CreateBtn;
end;procedure TFormStuMain.CreateBtn;
var
varBtn:array of TButton;
btnNum:Integer;
i:Integer;
begin
btnNum:=StrToInt(FormStuMain.Edit1.Text)-1;
SetLength(varBtn,btnNum);
for i:=0 to btnNum do
begin
varBtn[i]:=TButton.Create(varBtn[i]);
varBtn[i].Parent:=FormStuMain.Panel1;
varBtn[i].Caption:='按钮'+IntToStr(i);
varBtn[i].Left:=75*i;
end;
end;
………………raised exception class EAccessViolation with message………………
百思不得其解。
如果在CreateBtn的Begin下面,第一句写ShowMessage(IntToStr(i));的话,运行时往往到最后一个按钮时报上面的错误,而不是一开始就报错。如果不加ShowMessagep这句,是一开始就报错,运行不了。procedure TFormStuMain.Button1Click(Sender: TObject);
begin
CreateBtn;
end;procedure TFormStuMain.CreateBtn;
var
varBtn:array of TButton;
btnNum:Integer;
i:Integer;
begin
btnNum:=StrToInt(FormStuMain.Edit1.Text)-1;
SetLength(varBtn,btnNum);
for i:=0 to btnNum do
begin
varBtn[i]:=TButton.Create(varBtn[i]);
varBtn[i].Parent:=FormStuMain.Panel1;
varBtn[i].Caption:='按钮'+IntToStr(i);
varBtn[i].Left:=75*i;
end;
end;
nil提示“…………with message 'Invalid pointer operation'.Process stopped…………”
self提示同样信息
SetLength(varBtn,btnNum);
for i:=0 to btnNum-1 do
begin
varBtn[i]:=TButton.Create(nil);
varBtn[i].Parent:=FormStuMain.Panel1;
varBtn[i].Caption:='按钮'+IntToStr(i);
varBtn[i].Left:=75*i;
end;