Frm1为主窗体。
在Frm1中调用Frm2.ShowModal。
在Frm2中调用Frm3.ShowModal。
我想问如何在Frm3.ShowModal之前把Frm2关掉?直接Close不行。要等Frm2.ShowModal执行完才能执行。我自己想了一个办法,在Frm3.ShowModal之前让Frm2.Visible为false。
Frm3关闭的时候,把Frm2也关闭。但总觉得这个办法不是很法,所以特地请教大家,
看看有没有别的好办法。。谢谢。

解决方案 »

  1.   

    我想问如何在Frm3.ShowModal之前把Frm2关掉?
    皮之不存,毛将焉附?
      

  2.   

    同意free007(绝色蜜蜂) ,就是就是。
    要不你就先隐藏后关闭就是了
      

  3.   

    //我想问如何在Frm3.ShowModal之前把Frm2关掉?我的办法是在Frm3.ShowModal之前,让Frm2.Visible为false,实际上并没有关闭。在Frm3.Close之前,再把Frm2关掉,所以说这个办法并不是很好。
      

  4.   

    procedure TForm2.Button1Click(Sender: TObject);
    begin
      Hide;
      Close; // 当然,此时并未真正关闭
      Form3.ShowModal; // 返回后真正关闭
    end;
      

  5.   


    能否在Frm3.Create()中把Frm2.Close掉呢?没试。
      

  6.   

    用Show不行吗?干吗非要showmodal?
      

  7.   

    发送一条自定义消息执行Form3.ShowModal即可const
      MY_MESSAGE = WM_USER;procedure x_message(var msg: TMessage); message MY_MESSAGE;
    procedure TForm2.Button1Click(Sender: TObject);
    begin
      Close;
      PostMessage(Handle, MY_MESSAGE, 0, 0);
    end;procedure TForm2.x_message(var msg: TMessage);
    begin
      form3.ShowModal;
    end;
      

  8.   

    hiflower(花) 的办法跟我的差不多。visible为false实际上就是Hide方法。
    呵呵。。
    只不过你把Close语句写在Frm2中了。cllxyuer(蓝天醉在清水塘) 的方法可能不行。
      

  9.   

    12rain(中雨~百年孤独) 是可以的。奇怪,为什么这样就可以呢?
    是不是Frm2在处理消息时,可以不用等返回值就可以关闭了呢????
      

  10.   

    PostMessage的意思就是把一个消息存入待处理的消息队列中、而不等待它的处理结果、
    是没有返回值的、