运行程序一切正常,但是当点菜单中“退出系统”后,就出现错误:
Project Project1.exe raised exception class EAceessViolation with message
'Access violation at address 0040351E in module 'Project1.exe'.Read of address FFFFFFD0 ' Process stopped
Use  Step or Run to continue.一些代码如下:
Project1program Project1;uses
  Forms,
  Unit1 in 'Unit1.pas' {SplashForm},
  Unit2 in 'Unit2.pas' {loginForm},
  Unit3 in 'Unit3.pas' {mainForm},
  Unit4 in 'Unit4.pas' {DataMD: TDataModule},
  Query in 'Query.pas' {QueryForm},
  addUser in 'addUser.pas' {AddUserForm},
  Mpassword in 'Mpassword.pas' {MPWDForm},
  addPO in 'addPO.pas' {addPOform},
  about in 'about.pas' {aboutform};{$R *.res}begin
  Application.Initialize;
  Application.CreateForm(TSplashForm, SplashForm);
  Application.CreateForm(TloginForm, loginForm);
  Application.CreateForm(TmainForm, mainForm);
  Application.CreateForm(TDataMD, DataMD);
  Application.CreateForm(TQueryForm, QueryForm);
  Application.CreateForm(TAddUserForm, AddUserForm);
  Application.CreateForm(TMPWDForm, MPWDForm);
  Application.CreateForm(TaddPOform, addPOform);
  Application.CreateForm(Taboutform, aboutform);
  Application.Run;
end.主界面:就是点主界面中“退出系统”出现错误:unit Unit3;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ToolWin, ComCtrls, Menus;type
  TmainForm = class(TForm)
    MainMenu1: TMainMenu;
    StatusBar1: TStatusBar;
    ToolBar1: TToolBar;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    N8: TMenuItem;
    N9: TMenuItem;
    N10: TMenuItem;
    N11: TMenuItem;
    N12: TMenuItem;
    N13: TMenuItem;
    N14: TMenuItem;
    N15: TMenuItem;
    N16: TMenuItem;
    N17: TMenuItem;
    procedure N14Click(Sender: TObject);
    procedure N15Click(Sender: TObject);
    procedure N16Click(Sender: TObject);
    procedure N17Click(Sender: TObject);
    procedure N9Click(Sender: TObject);
    procedure N7Click(Sender: TObject);
    procedure N8Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure N6Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  mainForm: TmainForm;implementationuses Query,  addUser, addPO,Mpassword,about, Unit4;{$R *.dfm}  //按生产任务单号查询
procedure TmainForm.N14Click(Sender: TObject);
begin
        Application.CreateForm(TQueryForm,QueryForm);
        QueryForm.Query.ActivePageIndex:= 0;
        QueryForm.ShowModal;
        QueryForm.Free;
end;  //按生产部门查询
procedure TmainForm.N15Click(Sender: TObject);
begin
    Application.CreateForm(TQueryForm,QueryForm);
    QueryForm.Query.ActivePageIndex:=1;
    QueryForm.ShowModal;
    QueryForm.Free;
end;  //按应入库日期查询
procedure TmainForm.N16Click(Sender: TObject);
begin
    Application.CreateForm(TQueryForm,QueryForm);
    QueryForm.Query.ActivePageIndex:=2;
    QueryForm.ShowModal;
    QueryForm.Free;
end; //混合查询
procedure TmainForm.N17Click(Sender: TObject);
begin
    Application.CreateForm(TQueryForm,QueryForm);
    QueryForm.Query.ActivePageIndex:=3;
    QueryForm.ShowModal;
    QueryForm.Free;
end;procedure TmainForm.N9Click(Sender: TObject);
begin
      Application.Terminate;
end; //新增用户
procedure TmainForm.N7Click(Sender: TObject);
begin
    Application.CreateForm(TAddUserForm,AddUserForm);
    AddUserForm.ShowModal;
    AddUserForm.Free;
end;//修改密码
procedure TmainForm.N8Click(Sender: TObject);
  begin
   application.CreateForm(TMPWDForm,MPWDForm);
   Mpwdform.ShowModal;
   Mpwdform.free;
  end;//新增生产任务单
procedure TmainForm.N2Click(Sender: TObject);
begin
     application.CreateForm(Taddpoform,addpoform);
     addpoform.ShowModal;
     addpoform.Free;
end;
 //关于系统
procedure TmainForm.N6Click(Sender: TObject);begin
    application.CreateForm(Taboutform,aboutform);
    aboutform.ShowModal;
    aboutform.Free;end;end.这个错误经常有人遇到,但是各人的情况不一样,我是初学者,想请大家看看这个是什么原因?

解决方案 »

  1.   

    程序运行时Project1里面已经创建了所有的窗体,点击事件中无需再重复创建了,只需show出来就可以了。
    procedure TmainForm.N9Click(Sender: TObject);
    begin
          Application.Terminate;
    end;这个是关闭事件吗?为什么用terminate,直接close;
      

  2.   


    [1]那个就关闭程序事件,我把它改成mainform.close;了
    [2]我把除Project1外的所有createform全注释掉了,可是问题依然存在,代码:
    mainform:unit Unit3;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ToolWin, ComCtrls, Menus;type
      TmainForm = class(TForm)
        MainMenu1: TMainMenu;
        StatusBar1: TStatusBar;
        ToolBar1: TToolBar;
        N1: TMenuItem;
        N2: TMenuItem;
        N3: TMenuItem;
        N4: TMenuItem;
        N5: TMenuItem;
        N6: TMenuItem;
        N7: TMenuItem;
        N8: TMenuItem;
        N9: TMenuItem;
        N10: TMenuItem;
        N11: TMenuItem;
        N12: TMenuItem;
        N13: TMenuItem;
        N14: TMenuItem;
        N15: TMenuItem;
        N16: TMenuItem;
        N17: TMenuItem;
        procedure N14Click(Sender: TObject);
        procedure N15Click(Sender: TObject);
        procedure N16Click(Sender: TObject);
        procedure N17Click(Sender: TObject);
        procedure N9Click(Sender: TObject);
        procedure N7Click(Sender: TObject);
        procedure N8Click(Sender: TObject);
        procedure N2Click(Sender: TObject);
        procedure N6Click(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      mainForm: TmainForm;implementationuses Query,  addUser, addPO,Mpassword,about, Unit4;{$R *.dfm}  //按生产任务单号查询
    procedure TmainForm.N14Click(Sender: TObject);
    begin
          //  Application.CreateForm(TQueryForm,QueryForm);
            QueryForm.Query.ActivePageIndex:= 0;
            QueryForm.ShowModal;
            QueryForm.Free;
    end;  //按生产部门查询
    procedure TmainForm.N15Click(Sender: TObject);
    begin
        //Application.CreateForm(TQueryForm,QueryForm);
        QueryForm.Query.ActivePageIndex:=1;
        QueryForm.ShowModal;
        QueryForm.Free;
    end;  //按应入库日期查询
    procedure TmainForm.N16Click(Sender: TObject);
    begin
        //Application.CreateForm(TQueryForm,QueryForm);
        QueryForm.Query.ActivePageIndex:=2;
        QueryForm.ShowModal;
        QueryForm.Free;
    end; //混合查询
    procedure TmainForm.N17Click(Sender: TObject);
    begin
       // Application.CreateForm(TQueryForm,QueryForm);
        QueryForm.Query.ActivePageIndex:=3;
        QueryForm.ShowModal;
        QueryForm.Free;
    end;procedure TmainForm.N9Click(Sender: TObject);
    begin
          mainform.Close;
    end; //新增用户
    procedure TmainForm.N7Click(Sender: TObject);
    begin
       // Application.CreateForm(TAddUserForm,AddUserForm);
        AddUserForm.ShowModal;
        AddUserForm.Free;
    end;//修改密码
    procedure TmainForm.N8Click(Sender: TObject);
      begin
      // application.CreateForm(TMPWDForm,MPWDForm);
       Mpwdform.ShowModal;
       Mpwdform.free;
      end;//新增生产任务单
    procedure TmainForm.N2Click(Sender: TObject);
    begin
         //application.CreateForm(Taddpoform,addpoform);
         addpoform.ShowModal;
         addpoform.Free;
    end;
     //关于系统
    procedure TmainForm.N6Click(Sender: TObject);begin
       // application.CreateForm(Taboutform,aboutform);
        aboutform.ShowModal;
        aboutform.Free;end;procedure TmainForm.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      mainform.Close;
      mainform.free;
    end;end.
      

  3.   

    这里已经创建了:
    Application.CreateForm(TQueryForm, QueryForm);    Application.CreateForm(TQueryForm,QueryForm);  //这里又创建
        QueryForm.Query.ActivePageIndex:=2;
        QueryForm.ShowModal;
        QueryForm.Free;   //这里又释放
    //混合查询
    procedure TmainForm.N17Click(Sender: TObject);
    begin
       // Application.CreateForm(TQueryForm,QueryForm);
        QueryForm.Query.ActivePageIndex:=3;
        QueryForm.ShowModal;
      // QueryForm.Free;           //这样注释掉就行了。
    end;
      

  4.   


    procedure TmainForm.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      //mainform.Close;
      mainform.free;
    end;
    你前面的菜单点击事件mainform.close已经调用过了