2011-04-06 172 views
3

我有示出了在相同的消息环螺纹托管多个不同的顶层窗口的应用程序。这存在允许用户打开相同数据的不同视图。 (在MS Outlook中,您可以在另一个文件夹,右击并选择“在新窗口中打开”来获得类似的行为)。显示模态对话框(MessageBox中)冻结其他窗口在应用

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

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

  • 更换模态对话框与非模态对话框和禁用父窗口,当他们打开
  • 每个这些窗口

任何意见的应用程序中创建不同的线程?

+2

没有很好地解决了这一点,据我所知。我很想听到一个。 – SLaks 2011-04-06 15:24:22

+0

我认为你最好的选择是与(“替换模态对话框与非模态对话框,并禁用父窗口,当他们打开”),然后禁用父窗体,然后订阅所有窗体的事件,如果表单关闭它检查如果还有其他开放的表单(某种计数器可能?),然后如果没有再次启用主表单 – 2011-04-06 15:31:57

+0

这里有相当多的讨论:http://stackoverflow.com/questions/3494539/what-螺纹把手模态 - 对话框窗口,在网 – 2011-04-06 18:13:27

回答

4

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