在MDI应用程序中有一个打开的模态形式A.表单B从表单A模态显示。 如何在调用模态形式B之后关闭模态形式A?
答案 0 :(得分:5)
模态意味着终身嵌套。当一个模态形式打开另一个模态形式时,第一个形式需要在第二个模态形式的整个生命周期内保留。
所以,你需要做的是关闭第一个模态形式之前你显示第二个模态形式。从第一个模态形式内部做起来有点棘手,因此最好向主表单寻求帮助。主要形式可以:
Free
。如果第一个模态形式需要从它自己的一个事件处理程序触发它,那么最好的方法是将第一个模态形式排列到主窗体。例如PostMessage
或TThread.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);