所有的窗体都是Auto-create forms 而非Available forms 
然后主窗体是Main 
而登陆窗体是Login 
另外一个窗体为B 
在主窗体显示之前我先来显示Login 
代码如下: 
procedure TMainForm.FormShow(Sender: TObject); 
begin 
  LoginForm.ShowModal; 
end; 这个能正常登陆,当我先让Main窗体隐藏后,即:MainForm.hide; 
我想在B窗口中重新显示Main窗体,并将B窗口关闭 
代码: MainForm.Visible:=true;B.Close; 
但是出现问题:又重新显示登陆窗体了,然后再重新登陆后才能进入主窗口 
我知道这是又调用了在TMainForm.FormShow事件 然后我用以下方法
procedure TMainForm.FormShow(Sender: TObject); 
begin 
  if not LoginForm.hasLogin then  //hasLogin是在LoginForm定义的一个public变量,登陆成功后,必须初始LoginForm:= true; 
    LoginForm.ShowModal; 
end;
出现这种问题:
不过我有两个窗口都要用在主窗口隐藏后到时候再重新显示主窗口,但是一个能顺利能重新显示,并能正常操作,但是另一个虽然回到了主窗体,也显示了主窗体,但是却是死到那里了,不能动了,就像死循环了死的,点击任何菜单或者按钮都没有反应。这两个窗体里面用于重新显示主窗体的按钮里面的代码,是一样的啊,都是: MainForm.Visible:=true; 
为什么一个实现了,一个却是死循环啊,主窗口里面的东西点都点不了
 请问我该怎么做啊,请帮帮我啊

解决方案 »

  1.   

    是你的位置写错了 应该写在
    procedure TFmain.FormCreate(Sender: TObject);
    begin 
      LoginForm.ShowModal; 
    end;
    一次性的东西应该在Creat下
      

  2.   

    要是写在FormCreate下面的时候会出现错误Access violation at address 02E21C10 Read of address 02E21C1
    不知道怎么会事 啊
      

  3.   

    我以前实现过,但是现在不知道为什么那样做却不成功,所以才把Main作为主窗口的
    以前就是用login作为Auto-create forms ,并且为主窗口,其他的都是Available forms 
    这样,在登陆键里打开主窗口
      

  4.   

    如果main不是MDI的父窗体,就用login作为Auto-create forms ,并且为MainForm,
    其他的都是Available forms 这样,在登陆键里先create其他窗口,再show 
      

  5.   

    现在这样把login窗体写在主窗体的show事件里没有问题,是否是你的代码写错了。我简单写了下:<mainF 主界面>
    procedure TmainF.FormShow(Sender: TObject);
    begin
      if not loginF.HasLogin then
        loginF.ShowModal;
    end;procedure TmainF.Button1Click(Sender: TObject);
    begin
      mainF.Hide;
      form3.ShowModal;   //第一个跳出窗体
      mainF.Visible:=true;
    end;procedure TmainF.Button2Click(Sender: TObject);
    begin
      mainF.Hide;
      form4.ShowModal;   //第二个跳出窗体
      mainF.Visible:=true;
    end;<Form3>  关闭事件
    procedure TForm3.Button1Click(Sender: TObject);
    begin
      modalresult := mrok;
    end;<Form4>  关闭事件
    procedure TForm4.Button1Click(Sender: TObject);
    begin
      modalresult := mrok;
    end;<project1.dpr 工程文件>
     Application.Initialize;
     Application.CreateForm(TmainF, mainF);
     Application.CreateForm(TLoginF, LoginF);
     Application.CreateForm(TForm3, Form3);
     Application.CreateForm(TForm4, Form4);
     Application.Run;
      

  6.   

    另外贴一种写登录窗体的方法,写在工程文件里的。
    先把LoginF窗体设为Available forms
    project1.dpr
    {$R *.res}begin
      Application.Initialize;
      try
         LoginF := TLoginF.Create(Application);
         LoginF.ShowModal;
      finally
         LoginF.Free;
         LoginF:= Nil;
      end;
      Application.CreateForm(TMainF, MainF);
      Application.Run;