请问下面这段代码,要关闭当前的form4后再显示另一个form1,但是我发现关闭不了,请问是什么原因?
...
form4.close;
form4.free;
form1.show;
... 

解决方案 »

  1.   

    free应该是可以的,把代码都贴出来看看
      

  2.   

    unit frmLogin;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, ExtCtrls,frmFull,unit1, Db, ADODB;type
      TForm4 = class(TForm)
        imgAthena: TImage;
        lblUserName: TLabel;
        lblPassword: TLabel;
        edtUserName: TEdit;
        edtPassWord: TEdit;
        btnOK: TButton;
        btnCancel: TButton;
        procedure btnOKClick(Sender: TObject);
        procedure btnCancelClick(Sender: TObject);
        procedure edtUserNameKeyPress(Sender: TObject; var Key: Char);
        procedure edtPassWordKeyPress(Sender: TObject; var Key: Char);
        procedure FormActivate(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        //procedure edtPassWordChange(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form4: TForm4;implementation{$R *.DFM}procedure TForm4.btnOKClick(Sender: TObject);
    begin//==============打开oracle记录集
     DataSet.Connection:=Cnn;
     DataSet.CommandText:='select * from pwd where usrname='''+ edtUserName.Text +''' and passwd=''' + edtPassWord.Text + '''';
     DataSet.Open;
     if DataSet.RecordCount=1 then
            begin
                    dataset.Close;
                    form4.ModalResult:=1;                form4.close;
                    form4.free;
                    form1.show;
            end
     else
            begin
                   application.MessageBox('用户名或!'+#13+#10+'密码不正确!!','测试程序',0);
            end
    end;procedure TForm4.btnCancelClick(Sender: TObject);
    begin
    application.Terminate;
    end;procedure TForm4.edtUserNameKeyPress(Sender: TObject; var Key: Char);
    begin
    if Key = #13 then begin
        if UpperCase(Sender.ClassName) <> UpperCase('TDBGrid') then begin
          Key := #0;
          PerForm(WM_NEXTDLGCTL,0,0);
        end;
      end;
      if Key = #27 then close;
    end;procedure TForm4.edtPassWordKeyPress(Sender: TObject; var Key: Char);
    begin
    if key = #13 then
      begin
        btnok.Click;
      end;
    end;procedure TForm4.FormActivate(Sender: TObject);
    begin
    edtUserName.SetFocus;
    //edtPassWord.SetFocus ;
    end;procedure TForm4.FormCreate(Sender: TObject);
    begin
        form4.top:=(screen.Height-form4.Height) div 2;
        form4.Left:=(screen.Width-form4.width) div 2;
    end;end.
      

  3.   

    你把form1.show放在form4.close前面看看。
      

  4.   

    你把form1的表单设为主表单,form4的内容写在form1.show的事件中,如果要关闭form4的表单的话,那就只要form4.clsoe;就行了啊.
      

  5.   

    在form1的onshow中加入form4.close试试。
      

  6.   

    如果是showmodal的modalresult:=1就把窗体关了。form4.close;这样调用是调用变量form4的close方法,不是self这样做的前提是
    form4 := Tform4.create(...);或application.createforom(form4,tform4);如果,这样调用
    frm : Tform4;
    ...
    frm := Tfrom4.create(application);
    frm.showmodal;
    你的代码肯定是错误的。
      

  7.   

    To:  lijinghe1(副乡长)(立党为公,执政为民) (
    那么,请斧正
      

  8.   

    在onClose 方法里写代码:
    Action := caFree;
      

  9.   

    上面除 lijinghe1(副乡长)(立党为公,执政为民) 的意思不明白外,其于的都试过了,不行,我原来还以为很简单的呢!不好意思呀!
      

  10.   

    从现在的代码看不出问题,你将form4.show 的那段贴出来
      

  11.   

    你要使用MDI窗体的话就要用
    在onClose 方法里写代码:
    Action := caFree;
    要使普通的SDI窗体的话就直接Close就可以了
      

  12.   

    在主窗体调用LOGIN写    Fm:=TFmor4.Create(nil);
        Fm.ShowModal;
        if Fm.ModalResult<>mrOK then halt;
        Fm.Free;
      
      from1 show
      

  13.   

    先 show 后close
    close 之后的语句可能不会执行了吧,个人认为,可以做个实验阿
      

  14.   

    lijinghe1(副乡长)(立党为公,执政为民) 讲得正确!
    form4.ModalResult:=1;这条语句有问题(语法没有问题)
    程序执行到这里的时候就返回了,后面的代码不会被执行.可以把后面的代码放到前面或方到调用这个窗体的的语句之后.