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

问题描述 投票:0回答:2

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

我遇到的问题是,当这些窗口之一打开模式对话框或消息框时,它会冻结父级的所有同级窗口。

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

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

有什么建议吗?

c# winforms modal-dialog
2个回答
4
投票

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


0
投票

如果使用 System.Windows.MessageBox.Show(),则有重载允许您传入父窗口。 如果您传入顶层窗口,则只有它应该被您的 MessageBox 阻止。

© www.soinside.com 2019 - 2024. All rights reserved.