在WinForms中,是否有人看到从另一个模态对话框调用一个模态对话会导致模态撤消



问题:

有人见过从另一个模态对话框调用一个模态对话导致模态被撤消吗?

如果您想使用ShowDialog进行调用,以便返回结果,但没有模态(其他窗体仍有响应),您将如何做到这一点?(我们不想这么做……但如果有办法做到这一点,也许我们是无意中这么做的。)

详细信息:

我们实现了自己的"打印"对话框,该对话框中的按钮可显示标准的PrintDialog、标准的PageSetupDialog和标准的PrintPreviewDialog。打印都是用我们自己的PrintDocument类完成的,该类派生自标准PrintDocument类。所以,我们正在努力遵循标准做法。。。我们只是需要用户从一些额外的设置开始。

我们使用PrintDialog.ShowDialog(mainWindow)从菜单中调用打印对话框。当它出现时,它是正确的模式(所有其他窗口都没有响应…特别是那个mainWindow)。在"打印"对话框中,有一些按钮可以调用其他三个对话框中的每一个。。。所有这些都是用ShowDialog(ourPrintDialog)调用的,使第一个打印对话框成为其父对话框。在PrintDialog和PageSetupDialog的情况下,它们是模态的(mainWindow和ourPrintDialog以及所有其他窗口都没有响应)。当我们确定或取消这些时,它会返回到第一个打印对话框(ourPrintDialog),它仍然是模态的(没有其他窗口响应)。

然而,在标准PrintPreviewDialog的情况下,尽管我们以相同的方式调用它(ShowDialog将第一个对话框作为其父对话框),但它并不是完全模态的。我们的主窗口再次响应。因此,您可以开始操作"打印"对话框正在打印的基础文档。。。这当然违背了许多假设。当您关闭"预览"对话框,返回到原始的"打印"对话框时,它现在也不处于模式状态。。。主窗口仍在响应。

我们在一个简单的测试应用程序中尝试过这样做,它运行良好。。。进入PrintPreviewDialog时,模态不会中断。因此,PrintPreviewDialog(因为其他两个应用程序不会发生这种情况)和我们的应用程序主窗口(因为测试应用程序不会出现这种情况)之间似乎有一些特定的交互。有什么建议吗?(因此我提出了上述两个问题。)

提前感谢您的任何建议!

不确定为什么会发生这种情况,但您可以尝试在窗口上运行Spy++并观察消息流,这可能会为您提供窗口之间发生的事情或相关窗口属性的线索。

相关内容

  • 没有找到相关文章

最新更新