登录窗体LoginForm点击按钮后进入主窗体MainForm,为什么登录窗体不消失?
我的代码:procedure TLoginFrm.btnOKClick(Sender: TObject);
begin
  if not Assigned(MainFrm) then begin
    Application.CreateForm(TMainFrm,MainFrm);//主窗体非自动创建
    try
      MainFrm.ShowModal(); //用show系统跳回开发状态
    finally
      LoginFrm.close();
    end;
  end
  else
    MainFrm.ShowModal;
end;
--------------
打开mainform后loginform并未消失,在finally中加入LoginFrm.Free 运行出现EAccessViolation异常。
请问如何解决。

解决方案 »

  1.   

    你的主窗体都不是自动生成的,那么子窗体呢?
    问题可能就是在这里,
    到工程文件中看看,你到底先创建了那个窗体!showModal显示窗体是,如果窗体没有关闭,那么其他窗体不可以得到焦点,show就没有这个问题,可以 看看帮助,很有用的
      

  2.   

    你要在工程上,或主窗体的OnCreate事件中创建和关闭login窗体。
    你搜一下可以得到这方面的很多资料。
      

  3.   

    对,看看project中的语句
    其实可以将上面的语句放到project中
    让LoginFrm返回一个值加以判断,如果可以,继续
    不可以,Exit
    试试看
      

  4.   

    你的写法不太好
    假设我定义
      var f:TLoginFrm;
      ...
      f.ShowModal;
    你看看执行到“LoginFrm.close();”会出现什么样的问题!!!!
      
    procedure TLoginFrm.btnOKClick(Sender: TObject);
    begin
      if not Assigned(MainFrm) then begin
         Application.CreateForm(TMainFrm,MainFrm);//主窗体非自动创建
      Close();
      MainFrm.ShowModal(); //用show系统跳回开发状态
    end;procedure TLoginFrm.FormClose(Sender: TObject; var Action: TCloseAction);
    {
      Action := caFree;
    }
      

  5.   

    很明显你的错误是:
    if not Assigned(MainFrm) thenelse 时,你没有close 你的 LoginFrm...不过你这种做法是不推荐的,一般主窗体是自动创建的,LoginFrm 在工程文件中创建,并用其逻辑影响Application的流程。
      

  6.   

    窗体showmodal之后,后面的代码无法执行,除非窗体close,你可以设置断点看看finally后面的代码什么时候运行。这样你的登录窗体当然无法close了。
    查查以前的帖子吧!这样的功能一般在.dpr文件中实现的