暂时隐藏模式对话框

我有一个模式对话框显示主应用程序窗口设置为所有者(如在dialog.ShowDialog(mainAppWindow) ),我想暂时让用户与主应用程序窗口交互,然后再返回到modal dialog。

我怎样才能做到这一点? 我正在使用Windows窗体。

编辑: AutoCAD做得很好。

Solutions Collecting From Web of "暂时隐藏模式对话框"

只需关闭模式对话框。 它不像正常的Form实例那样被放置,所以你可以通过再次调用ShowDialog()来简单地将其恢复。 请注意,在模态对话框中调用Hide()也会关闭它。

那么我不认为你想要一个模式对话框…

模态对话的全部目的是用户在以某种方式摆脱它之前不能做任何事情 。 我认为你应该创建自己的表单类来按照你想要的方式来行事。

看看http://en.wikipedia.org/wiki/Modal_window#Criticisms …有一种思想,你不应该使用模态窗口摆在首位。

您需要再次启用父窗口。 对于模式对话框,Windows会自动禁用父窗口,并在模式对话框关闭时重新启用它。

我还没有尝试,但它应该足以将父窗体的启用属性设置为true。 如果使用EnableWindow Win32 API无法正常工作。

出于某种原因,我不得不在.NET中面对同样的问题。 我有(主要)窗体显示模式对话框,我需要隐藏,与主窗口交互,并再次返回到模态对话框。

我个人不明白从Windows(API)的角度来看,但下面的解决方案适用于我。

整个技巧就是在显示模态对话框之前将主窗体设置为禁用状态(当主窗体没有被设置为Enabled = false时,即使在调用Enabled = true时,隐藏模式对话框也不能与其进行交互)。

作为对模态对话事件(称为NeedInteraction)的响应,我只是隐藏模式对话框,启用主窗体,在某些循环中与用户进行交互,禁用主对话框并再次显示模态对话框。

 void ShowDialog() { var dialog = new MyModalForm(); dialog.NeedInteraction += (sender, eventArgs) => { dialog.Hide(); Enabled = true; //wait till user finishes working with main window Enabled = false; dialog.Show(); } Enabled = false; dialog.ShowDialog(); Enabled = true; //don't forget to make it enabled afterwards } 

它可能不是干净的解决方案(因为不需要隐藏模式对话框),但它至少适用于我的情况。

模式/无模式的范例是,如果您希望用户能够与主应用程序进行交互,请使用无模式窗口,如果您不需要,则使用模式。 如果你想阻止他使用主应用程序 – 但是然后使用它 – 但不使用它 – 你的用户界面设计不适用于模式/无模式的范例。