AcceptButton не закрывает форму

У меня есть две формы, которые очень похожи, но в одной из них нажатие AcceptButton закрывает форму, а в другой форма не закрывается. У них обоих AcceptButton установлено на btnAccept.

Я недавно создал второй, первый существует некоторое время и был создан кем-то другим.

Они оба открываются следующим образом:

using(var form = new SomeDialog(dependency))
{
    form.StartPosition = FormStartPosition.CenterParent;
    form.ShowDialog(this);
}

Оба они обрабатывают нажатие кнопки принятия в этих строках.

private void btnAccept_Click(object sender, EventArgs e)
{
  _dependency.DoSomething(userInput);
}

Публикация всего моего файла дизайнера, вероятно, не будет полезной. Есть ли что-то особенное, что было бы полезно показать из этого? Я не смог найти похожий пост на StackOverflow.

Что я упускаю, что вызывает расходящееся поведение?


person Jeff B    schedule 20.08.2015    source источник
comment
Для формы потребуется, чтобы для свойства AcceptButton было установлено значение btnAccept.   -  person LarsTech    schedule 21.08.2015
comment
Обе формы имеют свойство AcceptButton, установленное на btnAccept.   -  person Jeff B    schedule 21.08.2015
comment
Тогда событие запрограммировано? Код запускается при нажатии?   -  person LarsTech    schedule 21.08.2015
comment
Да, точки останова в btnAccept_Click срабатывают, как и ожидалось. В одном форма потом закрывается, в другом остается открытой.   -  person Jeff B    schedule 21.08.2015
comment
Затем вы должны установить DialogResult формы в OK.   -  person LarsTech    schedule 21.08.2015


Ответы (1)


Свойство AcceptButton просто выбирает кнопку, которая будет выполнять действие по умолчанию при нажатии клавиши Enter. Хорошо видно в пользовательском интерфейсе с толстой рамкой вокруг кнопки. Но этого недостаточно, вам еще нужно реализовать действие по умолчанию.

Простой способ — установить свойство DialogResult кнопки в дизайнере. Это нормально, но имеет тенденцию вызывать сюрпризы, когда ваш обработчик событий делает что-то вроде проверки содержимого диалога, вам придется установить свойство DialogResult формы обратно в None, если вы недовольны. Лично я предпочитаю всегда явно устанавливать DialogResult формы в обработчике событий Click. Это отлаживаемый код, давайте посмотрим, почему он «не работает».

person Hans Passant    schedule 20.08.2015