2009-02-03 49 views
34

我如何获得System.Windows.ShowDialog()返回'true'?如何获得System.Windows.ShowDialog()返回'true'?

我对此有点新。 System.Windows.ShowDialog的退货类型是bool?它应该返回true当你打Submit,并且false当你打Cancel。但我不知道如何指定哪个Button是官方提交按钮。

编辑: 在一个相关的说明,我很好奇,怎么能返回null。

回答

36

http://msdn.microsoft.com/en-us/library/system.windows.window.showdialog.aspx

ShowDialog的返回一个可空<(中 <(T>)>)布尔值,指定 活性是否被接受或 取消。返回值是之前窗口关闭DialogResult属性 的 值(见 的DialogResult)。

基本上,您可以通过设置DialogResult的值来决定,而不是通过点击某个按钮来决定 - 您决定按钮的功能。

+0

我很抱歉,如果这是多余的或太明显,但你应该设置布尔?在调用对话框内的Close()方法之前的DialogResult值。如果不这样做,将导致引发InvalidOperationException异常,并将Exception.Message属性设置为“只有在创建窗口并显示为对话框后才能设置DialogResult。“ – ClockEndGooner 2016-07-29 01:13:50

+0

如果我有这个错误,你将不得不原谅我,因为我做了WinForms已经有好几年了,但我想,是的,你会设置DialogResult _(例如,在Button的OnClick处理程序中,但它 – JMD 2016-07-29 14:52:47

14

在WPF中,Button.IsDefault属性设置为true以指定一个按钮是一个窗口中的“提交”按钮。我不能100%确定这会使窗口关闭,DialogResult为true。如果没有,你只需要处理正是如此它的Click事件:

this.DialogResult = true; 

编辑

同样,你可以使用Button.IsCancel属性有一个按钮是“取消”按钮,以便形成。

编辑2

我相信原因ShowDialog的为空是因为直到形式提交或取消它为空,你可以测试,如果你是看在后台线程的对话框。我还没有尝试过,但它似乎是为什么他们会向属性引入第三个“未知”(空)状态的逻辑原因。

+4

不,将IsDefault设置为true将不会导致按钮单击关闭对话框,但IsCancel将会设置DialogResult将关闭对话框设置Is默认为true将导致命令被触发,如果用户点击回车键。 – 2012-06-27 21:11:04

6

如果将DialogResult设置为true ShowDialog返回true,如果将DialogResult设置为false ShowDialog返回false如果没有设置DialogResult(用户单击右上角的红色X),则关闭对话框ShowDialog将返回null。

设置ISDEFAULT为true,将导致按钮看起来有点不同,并按下Enter键将“点击”这个按钮。

如果设置IsCancel为true,按下ESC键将“点击”这个按钮。