我用一个按狃动态创建窗体,运行时出错: Access violation at address 0044E559 in module 'Project2.exe',Read of address 0000004C  procedure TForm1.ToolButton1Click(Sender: TObject);
var
  frm2:TForm2;
begin
  frm2 := Tform2.Create(nil);
  frm2.ShowModal;
end;

解决方案 »

  1.   

    不是这里的错。最好TForm.Create(Owner);
      

  2.   

    应该是TForm2的OnCreate或者OnShow事件里的代码有问题。
      

  3.   

    frm2是不是在工程中已经创建了
      

  4.   

    unit Unit2;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm2 = class(TForm)
        Button1: TButton;
        Label3: TLabel;
        Label5: TLabel;
        Label1: TLabel;
        Label2: TLabel;
        Edit1: TEdit;
        Edit2: TEdit;
        Edit3: TEdit;
        ComboBox1: TComboBox;
        Label4: TLabel;
        Label6: TLabel;
        Edit4: TEdit;
        Edit5: TEdit;
        Label7: TLabel;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form2: TForm2;implementation
    uses
      Unit6;{$R *.dfm}procedure TForm2.FormCreate(Sender: TObject);
    begin
      Form2.Width := 444;
      Form2.Height := 250;
    end;procedure TForm2.Button1Click(Sender: TObject);
    var
      Age,nName,Sex,MobilePhone,Tel,Address:String;
    begin
      nName := Edit1.Text;
      Age := Edit2.Text;
      Sex := ComboBox1.Text;
      MobilePhone := Edit3.Text;
      Tel := Edit4.Text;
      Address := Edit5.Text;
      with DataModule6.ADOQuery1 do
      begin
        Close;
        sql.Clear;
        sql.Add('Insert into Tab_Address values('''+nName+''','''+Address+''','''+Sex+''','+Age+','''+MobilePhone+''','''+Tel+''')');
        ExecSQL;
      end;
      ShowMessage('添加成功!');
      Edit1.Text := '';
      Edit2.Text := '';
      ComboBox1.Text := '';
      Edit3.Text := '';
      Edit4.Text := '';
      Edit5.Text := '';  
    end;end.
    Form2的代码
      

  5.   

    Form2中也没看出什么问题,你单步调试一下看看
      

  6.   

    问题在工程文件中
     Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.CreateForm(TForm2, Form2); //没有这个就会有你的那个问题
      Application.Run;
      

  7.   

    有 Application.CreateForm(TForm2, Form2);  这句的话就会一开始就有2个界面了
      

  8.   

    procedure TForm2.FormCreate(Sender: TObject);
    begin
      Form2.Width := 444;
      Form2.Height := 250;
    end;
    -------------->
    procedure TForm2.FormCreate(Sender: TObject);
    begin
      Width := 444;
      Height := 250;
    end;
      

  9.   

    OnCreate事件的时候,Form2还没有建立好,所以Form2是个nil,会出错。
      

  10.   


    procedure TForm1.Button1Click(Sender: TObject);
    begin
    form2:=tform2.Create(self);
    form2.ShowModal;
    form2.Release;
    end;
      

  11.   

    或:procedure TForm1.Button1Click(Sender: TObject);
    begin
    form2:=tform2.Create(nil);
    form2.ShowModal;
    form2.Release;
    end;
      

  12.   


    procedure TForm1.Button1Click(Sender: TObject);
    begin
    with tform2.Create(nil) do begin
     showmodal;
     release;
    end;
    end;
      

  13.   

    我用这样就ok了
    procedure TForm1.ToolButton1Click(Sender: TObject);
    var
      frm2:TForm2;
    begin
      frm2 := Tform2.Create(nil);
      frm2.ShowModal;
    end; 有人知道原因吗?
      

  14.   

    procedure TForm1.ToolButton1Click(Sender: TObject);
    begin
      Application.CreateForm(TForm2, Form2);
    end;这样 贴错了
      

  15.   

    如果把Form2作为局部变量,还是会有同样的问题。procedure TForm1.ToolButton1Click(Sender: TObject);
    var
      Form2:TForm2;
    begin
      Application.CreateForm(TForm2, Form2);
    end;
      

  16.   

    你报错的原因是因为有个对象没有实例化,用Application正好可以解决。
    动态创建窗体:
    var
      oFrm:TForm;
    begin
      oFrm := TForm.Create(Self);
      with oFrm do begin
        Top    := **;
        Left   := **;
        Height := **;
        Width  := **;
        Parent := nil;
        Caption:= **;
      end;
      oFrm.ShowModal;
      
      这是不属于任何窗体的。若想在上面添加控件,只需要改 Parent := oFrm;  
      

  17.   

    只有 gzmhero 说到了问题的原因。
      

  18.   

    大家说的都对 
    关于动态创建窗体有很多细节,有的从属性设置就搞定了.呵呵
    这些不是从FromShow等发放中能看到的.