显示模式对话框(messageBox)会冻结应用程序中的其他窗口

时间:2011-04-06 15:22:02

标签: c# winforms modal-dialog

我有一个应用程序,显示在同一个消息循环线程中托管的多个不同的顶级窗口。这是为了允许用户打开相同数据的不同视图。 (在MS Outlook中,您可以右键单击另一个文件夹并选择“在新窗口中打开”以获得类似的行为)。

我遇到的问题是,当其中一个窗口打开一个模态对话框或消息框时,它会冻结父窗口的所有兄弟窗口。

当我打开一个模态对话框时,我希望它只是相对于父/所有者窗口的模态,而不是相对于应用程序中其他顶级窗口的模态。有没有合理的方法来做到这一点?我考虑过了:

  • 用非模态对话框替换模态对话框并在打开时禁用父窗口
  • 在每个窗口的应用程序中创建不同的线程

有什么建议吗?

1 个答案:

答案 0 :(得分:4)

这就是'模态'的含义。您必须使其成为非模态,使用表单并使用其Show()方法显示它。要禁用UI的某些部分,请将控件或表单的Enabled属性设置为false。使用表单的FormClosed事件将其设置回true。请注意,这通常不会提高可用性。