在MDI应用程序中,有一个打开的模态窗体A。从窗体A中以模态方式显示了窗体B。 如何在调用模态窗体B后立即关闭模态窗体A?
在MDI应用程序中,有一个打开的模态窗体A。从窗体A中以模态方式显示了窗体B。 如何在调用模态窗体B后立即关闭模态窗体A?
模态意味着终身嵌套。当一个模态表单打开另一个模态表单时,第一个表单需要在第二个模态表单的整个生命周期内保留。
因此,您需要在显示第二个模态表单之前 关闭 第一个模态表单。由于从第一个模态表单内部执行此操作有些棘手,因此最好向主表单请求帮助。主表单可以:
Free
。如果第一个模态表单需要从其自己的事件处理程序触发此操作,则向主表单排队消息是向前迈出的最佳方法。例如使用 PostMessage
或者 TThread.Queue
。
将以模态显示的窗体的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 的模态结果或其他条件。
在显示模态FormB之前,我会隐藏FormA。然后根据FormB的ModalResult来显示或关闭FormA。
Hide;
FormB.ShowModal;
if FormB.ModalResult <> mrOK then Close;
ModalResult = mrOK 表示 Formb 已经打开了一个 MDIchild 窗体并已关闭。