报错:
………………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;

解决方案 »

  1.   

    varBtn[i]:=TButton.Create(nil);是不是这里?
      

  2.   

    试了一下,nil和self都不行。
    nil提示“…………with message 'Invalid pointer operation'.Process stopped…………”
    self提示同样信息
      

  3.   

    btnNum:=StrToInt(FormStuMain.Edit1.Text);
      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;