2009-02-03 2 views
34

Как я могу получить System.Windows.ShowDialog(), чтобы вернуть 'true'?Как получить System.Windows.ShowDialog() для возврата 'true'?

Я немного новичок в этом. System.Windows.ShowDialog тип возврата: bool? Предполагается вернуть true, когда вы нажмете Submit и false, когда вы нажмете Cancel. Но я не уверен, как определить, какая Button является официальной кнопкой отправки.

EDIT: Относительно примечания, мне любопытно, как она может вернуть null.

ответ

36

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

ShowDialog возвращает обнуляемого < (Из < (Т>)>) Логическое значение, указывающее, был ли принята активность или отмененный. Возвращаемое значение - значение свойства DialogResult перед закрытием окна (см. DialogResult).

В принципе, вы решаете установить значение параметра DialogResult, а не нажатием определенной кнопки - вы сами решаете, что делает кнопка.

+0

Приносим извинения, если это избыточно или слишком очевидно, но вы должны установить bool? Значение DialogResult, прежде чем вы вызовете метод Close() внутри диалогового окна. В противном случае будет выведено InvalidOperationException, при этом для свойства Exception.Message установлено значение «DialogResult» можно установить только после создания окна и отображения в виде диалога.« – ClockEndGooner

+0

Вам придется простить меня, если я ошибаюсь, поскольку прошло много лет с тех пор, как я сделал WinForms, но я думаю, да, вы бы установили DialogResult _ (например, внутри обработчика OnClick Button, но он может быть любой механизм, о котором вы мечтаете) _, а затем вызвать Close(). – JMD

14

В WPF установите для свойства Button.IsDefault значение true, чтобы указать, что кнопка представляет собой кнопку «отправить» для окна. Я не уверен на 100%, что это закроет окно с помощью DialogResult из true. Если этого не произойдет, вам просто нужно обработать его Click событие таким образом:

this.DialogResult = true; 

Редактировать

Кроме того, вы можете использовать Button.IsCancel свойство иметь кнопки будет кнопка «Отмена» для форма.

Edit 2

Я считаю, что причина ShowDialog обнуляемая является то, что, так как это нуль до тех пор, форма не будет подана или отменена, вы можете проверить, что если вы смотрели диалог в фоновом потоке. Я не пробовал это, но кажется логичной причиной, почему они ввели третье «неизвестное» (нулевое) состояние в свойство.

+4

Нет, установка IsDefault в true не приведет к нажатию кнопки, чтобы закрыть диалоговое окно, однако IsCancel будет. Установка DialogResult закроет диалоговое окно. По умолчанию true приводит к срабатыванию команды, если пользователь нажимает клавишу Enter. –

6

Если вы установили DialogResult в true ShowDialog, возвращается значение true, если вы установите для параметра DialogResult значение false ShowDialog вернет false, если диалог закрыт без установки DialogResult (пользователь нажимает на красный X в верхнем правом углу) ShowDialog вернет значение null.

Установка IsDefault на true приведет к тому, что кнопка будет выглядеть немного по-другому, и нажатие кнопки «щелкнет» эту кнопку.

Если вы установили IsCancel в значение true, нажатие esc «нажмет» эту кнопку.

+0

При нажатии на X ShowDialog вернет false, а не null. Я считаю, что он возвращает только null, если что-то пошло не так (если когда-либо). –

Смежные вопросы