unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, ImgList, ComCtrls;
  type
  TMainForm = class(TForm)
    MainMenu1: TMainMenu;
    File1: TMenuItem;
    Open: TMenuItem;
    Close: TMenuItem;
    Save1: TMenuItem;
    Save2: TMenuItem;
    PrinterSetup: TMenuItem;
    Printer: TMenuItem;
    Quit: TMenuItem;
    WarningIndex: TMenuItem;
    Contract: TMenuItem;
    Construction: TMenuItem;
    Fee: TMenuItem;
    N13: TMenuItem;
    N14: TMenuItem;
    N15: TMenuItem;
    Contract1: TMenuItem;
    Contract2: TMenuItem;
    Construction1: TMenuItem;
    Construction2: TMenuItem;
    Construction3: TMenuItem;
    Fee1: TMenuItem;
    Fee2: TMenuItem;
    Fee3: TMenuItem;
    N1: TMenuItem;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    PrintDialog1: TPrintDialog;
    PrinterSetupDialog1: TPrinterSetupDialog;
    ImageList1: TImageList;
    New: TMenuItem;
    N2: TMenuItem;
    PageControl1: TPageControl;
    tbshWarnIndex: TTabSheet;
    TreeView1: TTreeView;
    procedure OpenClick(Sender: TObject);
    procedure Save1Click(Sender: TObject);
    procedure PrinterSetupClick(Sender: TObject);
    procedure PrinterClick(Sender: TObject);
    procedure Contract1Click(Sender: TObject);
    procedure Contract2Click(Sender: TObject);
    procedure CloseClick(Sender: TObject);
    procedure QuitClick(Sender: TObject);
   
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  MainForm: TMainForm;
implementationuses Unit2;{$R *.dfm}
procedure TMainForm.OpenClick(Sender: TObject);
var
  F : File;
begin
  OpenDialog1.Options := [ofAllowMultiSelect, ofFileMustExist];
  OpenDialog1.Filter := 'Yujing files (*.gyj)|(*.gyj)|All files (*.*)|(*.*)';
  if openDialog1.Execute then
  begin
    AssignFile(F,'OpenDialog1.FileName');
    Reset(F);
    Read(F);
  end;
end;procedure TMainForm.Save1Click(Sender: TObject);
begin
  SaveDialog1.Execute;
end;procedure TMainForm.PrinterSetupClick(Sender: TObject);
begin
  PrinterSetupDialog1.Execute;
end;procedure TMainForm.PrinterClick(Sender: TObject);
begin
  PrintDialog1.Execute;
end;procedure TMainForm.Contract1Click(Sender: TObject);
begin
  ConTractForm.Show;
end;procedure TMainForm.Contract2Click(Sender: TObject);
begin
  ContractForm.Show;
end;procedure TMainForm.CloseClick(Sender: TObject);
var
  F : File;
begin
  CloseFile(F);
end;procedure TMainForm.QuitClick(Sender: TObject);
begin
  ContractForm.Close;
  MainForm.Close;//这里出错了。我不知道为什么。
end;end.
unit Unit2;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;type
  TContractForm = class(TForm)  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  ContractForm: TContractForm;implementation{$R *.dfm}
end.
我改成close;也不行。上面就是MainForm.Close;出错。
出错是:Unit1.pas Error :State expected, but expression of type 'TMenuItem' found.
        Project1.dpr :Could not compile unit<Unit1.pas>.我做了个简单的。简单的程序如下:
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementationuses Unit2;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2.Show;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
  close;
end;end.unit Unit2;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;type
  TForm2 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form2: TForm2;implementation{$R *.dfm}end.
这个就可以。我怎么对比都没有找到原因!

解决方案 »

  1.   

    ContractForm.Close;
      MainForm.Close;//这里出错了。我不知道为什么。楼主说的"出错"是指编译错误还是运行错误?或者说执行的时候不能起到关闭窗口的作用?
      

  2.   

    procedure TMainForm.QuitClick(Sender: TObject);
    begin
      ContractForm.Close;
      MainForm.Close;//这样是不对的,直接Close或Self.Close
    end;
      

  3.   

    出错是:Unit1.pas Error :State expected, but expression of type 'TMenuItem' found.
            Project1.dpr :Could not compile unit<Unit1.pas>.
    双击这条信息,看看问题出在哪一行
      

  4.   

    Unit1.pas的错误就是我上面指出的第那一行MainForm.Close;我用过了Close;没有用。
    Project.dpr出错
    program Project1;uses
      Forms,
      Unit1 in 'Unit1.pas' {MainForm},
      Unit2 in 'Unit2.pas' {ContractForm};//是这一行出错。{$R *.res}begin
      Application.Initialize;
      Application.CreateForm(TMainForm, MainForm);
      Application.CreateForm(TContractForm, ContractForm);
      Application.Run;
    end.我这个是编译错误,不是运行时错误!谢谢楼上的各位,这么晚了还辛苦帮我看程序,向你们敬礼!
      

  5.   

    WGYKING(修罗是谁?!) 
    procedure TMainForm.QuitClick(Sender: TObject);
    begin
      ContractForm.Close;
      MainForm.Close;//这样是不对的,直接Close或Self.Close
    end;
    -------------
    我都是这样写也没有问题啊,而且,这样写会导致什么问题呢?请教一下.
      

  6.   

    楼主Q是多少?
    要不你现在发工程文件到我信箱吧
    [email protected]我帮你检查看