Существует ли стандартный способ возврата значений из пользовательских диалоговых окон в Windows Forms? - PullRequest
6 голосов
/ 31 августа 2008

Так что сейчас у моего проекта есть несколько пользовательских диалогов, которые делают такие вещи, как приглашение пользователя на день рождения или что-то еще. Прямо сейчас они просто делают что-то вроде установки свойства this.Birthday, как только они получают ответ (который имеет тип DateTime?, с нулевым значением, указывающим «Отмена»). Затем вызывающая сторона проверяет свойство Birthday созданного диалогового окна, чтобы выяснить, что ответил пользователь.

У меня вопрос: есть ли более стандартный шаблон для подобных вещей? Я знаю, что мы можем установить this.DialogResult для базовых вещей OK / Cancel, но есть ли более общий способ в Windows Forms для формы, чтобы указать «вот данные, которые я собрал»?

Ответы [ 5 ]

9 голосов
/ 31 августа 2008

Я бы сказал, что выставление свойств в вашем настраиваемом диалоге - это идиоматический путь, потому что так поступают стандартные диалоги (например, Select / OpenFileDialog). Кто-то может возразить, что более явным и намеренным показом является наличие метода ShowBirthdayDialog (), который возвращает искомый результат, но следование шаблону фреймворка - это, вероятно, мудрый путь.

3 голосов
/ 31 августа 2008

есть ли более стандартный шаблон для подобных вещей?

Нет, похоже, вы используете правильный подход.

Если диалоговое окно возвращает DialogResult.OK, предположим, что все необходимые свойства в диалоговом окне действительны.

2 голосов
/ 31 августа 2008

Для меня, придерживаясь диалогового окна, возвращающего стандартные диалоговые ответы, а затем получающего доступ к результатам через свойства, это путь.

Две веские причины, по которым я сижу:

  1. Согласованность - вы всегда делаете одно и то же с диалогом, и сама природа вопроса говорит о том, что шаблоны хороши (-: В равной степени вопрос в том, является ли это хорошим шаблоном?
  2. Это позволяет возвращать несколько значений из диалогового окна - хорошо, здесь также есть совершенно новое обсуждение, но применяемый прагматизм означает, что это то, что нужно в некоторых обстоятельствах, не всегда целесообразно или желательно упаковывать значения просто так, чтобы вы могли передать их обратно за один раз.

Поток логики тоже хорош:

if (Dialog == Ok)
{
    // Do Stuff with the entered values
}
else
{
    // Respond appropriately to the user cancelling the dialog
}

Это хороший вопрос - мы должны ставить такие вещи под сомнение, но для меня нынешняя модель вполне приличная.

Murph

1 голос
/ 31 августа 2008

В модальных диалоговых окнах ввода я обычно перегружаю ShowDialog и раздаю параметры для нужных мне данных.

DialogResult ShowDialog(out datetime birthday)

Я обычно нахожу, что легче обнаружить и понять, чем смешивать мои свойства со 100+, которые предоставляет класс Form.

Для форм у меня обычно есть контроллер и интерфейс IView, который использует свойства только для чтения для передачи данных.

0 голосов
/ 31 августа 2008

Я всегда делал это именно так, как вы описываете. Мне любопытно посмотреть, есть ли более приемлемый подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...