{两个单元文件,FORM1启动里加载,FORM2不加载,由程序动态加载,怎么判断FORM2已经启动过了呢?
求的情况是。
FORM1按BUTTON1模态加载了FORM2,按FORM2的BUTTON1,模态加载了FOM1,
此时怎么知道FORM2已经被加载过了呢。FORM1里的BUTTON2是我的代码,但好象求不出来哟,都是NO
}
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;implementation
       uses unit2;
{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var lform:Tform;
begin
    lform:=tform2.Create(self);
    lform.ShowModal ;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
if Assigned(form2) then
ShowMessage('ok')
else
ShowMessage('no');
end;end.
unit Unit2;interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type
  TForm2 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    ko:Integer;
    class function getko():Integer;
    { Private declarations }
  public    { Public declarations }
  end;var
  Form2: TForm2;implementation
    uses unit1;
{$R *.dfm}procedure TForm2.Button1Click(Sender: TObject);
var lform:Tform;
begin
    lform:=tform1.Create(self);
    lform.ShowModal;;
end;class function TForm2.getko: Integer;
beginend;end.

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var lform:Tform;
    begin
        lform:=tform2.Create(self);
        lform.ShowModal ;
        FreeAndNil(lform); //
    end;其它代碼不用!!!
      

  2.   

    orprocedure TForm1.Button1Click(Sender: TObject);
    begin
        form2:=tform2.Create(self);
        form2.ShowModal ;
        FreeAndNil(form2); //
    end;
      

  3.   

    不好用哦。FORM2在启动里面打掉了,只有FORM1启动里才加载的
      

  4.   

    function TfrmMain.createform(formclass: Tformclass): Tform;
    var lform:Tform;
    begin
        lform:=formclass.Create(self);
        result:=lform;
        //FREEANDNIL  --肯定不行,窗体都加不上,报错。
    end;
    procedure TfrmMain.Button1Click(Sender: TObject);
    begin
    createform(TFROM1).ShowModal;
    end;
    我的窗体都是这样加载的,不能用FREEANDNIL,(或许不知道怎么做),因为这是言主的,有几十个窗体之多。
      

  5.   

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

  6.   

    function TfrmMain.createform(formclass: Tformclass): Tform;
    var lform:Tform;
    begin
        lform:=formclass.Create(self);
        result:=lform;
        //FREEANDNIL  --肯定不行,窗体都加不上,报错。
    end;
    procedure TfrmMain.Button1Click(Sender: TObject);
    begin
    createform(TFROM1).ShowModal;
    end;
    我的窗体都是这样加载的,不能用FREEANDNIL,(或许不知道怎么做),因为这是言主的,有几十个窗体之多。帮忙看一下我的代码应该怎么改哟
      

  7.   

    和面向对象有屁联系!在Form1中添加一个Boolean变量,当加载过了Form2后设置它为True否则为False,就这样不就可以了!还要怎么样
      

  8.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      if not assigned(Form2) then
        begin
          Form2:=Tform2.Create(nil);
          form2.ShowModal;
          Form2.Free;             //添加这两行代码..
          form2:=nil;             //
        End;
    end;  
      

  9.   

    同意 Linux2001(恋人不如自恋)的看法,在FORM1里面定义一个变量就可以解决问题了!~