我有一个窗口,有时会使用Show()
打开,有时会使用ShowDialog()
。在第二种情况下,返回的对话结果对我来说很重要。但是,如果我在调用DialogResult
后设置Show()
,我会得到InvalidOperationException
。有没有办法找出用于打开窗口的方法,并相应地设置DialogResult
?或者还有另一种方式吗?
当然我知道我可以捕捉并忽略异常,但我不喜欢这个解决方案。
答案 0 :(得分:9)
在窗口内使用System.Windows.Interop.ComponentDispatcher.IsThreadModal来确定它是否在模态线程上运行。
答案 1 :(得分:3)
如果你在Reflector中查看set_DialogResult,它会检查_showingAsDialog以确定对话框是否是模态的。不幸的是,这是一个私人领域。
在调用Show()/ ShowDialog()之前,是否始终构造窗口的新实例。如果是这样,您可以将一个参数传递给构造函数,指示它是如何显示的。
答案 2 :(得分:2)
您可以使用Form.Modal
属性来检查使用方式。
在使用Form.Show()
的情况下,您必须使用其他方式让来电者知道表格的任何结果。
是否有理由使用两种方式显示表单?
答案 3 :(得分:0)
如何在表单结束事件中设置this.DialogResult = DialogResult.blah?