2009-02-03 50 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鍵將「點擊」這個按鈕。