德尔福。如何在调用另一个模态形式后关闭模态形式

时间:2013-12-17 08:52:42

标签: delphi delphi-xe

在MDI应用程序中有一个打开的模态形式A.表单B从表单A模态显示。 如何在调用模态形式B之后关闭模态形式A?

4 个答案:

答案 0 :(得分:5)

模态意味着终身嵌套。当一个模态形式打开另一个模态形式时,第一个形式需要在第二个模态形式的整个生命周期内保留。

所以,你需要做的是关闭第一个模态形式之前你显示第二个模态形式。从第一个模态形式内部做起来有点棘手,因此最好向主表单寻求帮助。主要形式可以:

  1. 在第一个模态表单上调用Free
  2. 创建并显示第二个模态表单。
  3. 如果第一个模态形式需要从它自己的一个事件处理程序触发它,那么最好的方法是将第一个模态形式排列到主窗体。例如PostMessageTThread.Queue

答案 1 :(得分:3)

将模式显示的表单的ModalResult属性设置为mrNone以外的值将导致表单关闭。

procedure TFormA.Button1Click(Sender: TObject);
begin
  ShowFormBModal;
  ModalResult := mrCancel; // this will close Form A if it's being shown modally
end;

根据您的要求,ModalResult的实际值可能取决于表格B的模态结果或其他条件。

答案 2 :(得分:0)

我在显示模态FormB之前隐藏了FormA。然后根据FormB的ModalResult显示或关闭formA。

Hide; 
FormB.ShowModal; 
if FormB.ModalResult <> mrOK then Close; 

ModalResult = mrOK表示Formb已打开MDIchild表单并已关闭。

答案 3 :(得分:0)

在关闭第一个模态表单之前,我会将一个自定义消息发布到应用程序的mainform(或其他),这将导致它显示第二个模态表单。我更喜欢这两种形式的“所有者”的控制权。

PostMessage(Application.Mainform.Handle,DO_OPEN_2ND_MODALFORM,0,0);