Установка AcceptButton в None все еще закрывает форму при ENTER - PullRequest
1 голос
/ 20 марта 2010

У меня есть приложение MDI для оконных форм, и мои дочерние формы в основном имеют кнопки «ОК» и «Отмена». Однако я не хочу, чтобы они были активированы с помощью клавиш ENTER / ESC, чтобы предотвратить случайное сохранение / прерывание. Таким образом, в форме для AcceptButton и CancelButton установлено значение none. Кнопка ESC действительно ничего не делает, но кнопка ENTER по-прежнему закрывает форму, «щелкая» первую найденную кнопку, отсортированную по TabOrder.

Почему это так? Должен ли я действительно начать делать обходные пути и ловить клавишу ВВОД?

Добавлено: ОК, это странно. Reflector говорит мне, что, очевидно, если первый элемент управления Tab Order (ну, фактически элемент управления, который активен по умолчанию при открытии формы) является кнопкой, тогда он назначается в качестве элемента управления по умолчанию. В противном случае ничего не происходит. Теперь вопрос меняется на: WTF?!

Ответы [ 3 ]

1 голос
/ 10 сентября 2013

За исключением того, что дизайнер устанавливает свойство DialogResult для ваших кнопок и не очищает их, если для свойства AcceptButton / CancelButton установлено значение None Итак, вы должны сделать это вручную (в вашем коде или в дизайнере).

Button okButton = new Button();

// some code here

okButton.DialogResult = DialogResult.None;
0 голосов
/ 25 марта 2015

Я просто застрял на той же проблеме. Долгое время не пользовался WinForms, подумал, можно ли что-то упустить в такой простой вещи?

В моем случае, я хочу, чтобы кнопка «ОК» была невидимой (или отключенной) во время выполнения некоторой задачи, а затем появлялась в конце ... Так что в начале показывается только «Отмена», и это всегда «принять»! Независимо от того, установил ли я AcceptButton на «Ok» или «None», и после того, как на форме появилось «Ok», все равно «Cancel» действует на Enter. Если обе кнопки всегда видны и включены - это правильно. Ну ... я думал, что это правильно, но теперь, прочитав это, я попытался переключить порядок кнопок и да, это первая кнопка, которая всегда "принимает".

Похоже, что Form.AcceptButton просто устарел и теперь не используется. Хотя Form.CancelButton работает до сих пор. Я знаю, как это работает в HTML, но в WinForms ... У меня тот же вопрос "wtf". .NET 4.5.

0 голосов
/ 23 марта 2010

Звучит так, что, поскольку кнопка «ОК» является первым элементом управления в порядке вкладок, она автоматически получает фокус клавиатуры при загрузке формы, что означает, что нажатие клавиши «Enter» приведет к ее щелчку. Если вы предпочитаете, чтобы фокус клавиатуры переходил к другому элементу управления, попробуйте установить для свойства ActiveControl другой элемент на форуме.

Button okButton = new Button();
TextBox someOtherControl = new TextBox();

// Add controls to form.
this.Controls.Add(okButton);
this.Controls.Add(someOtherControl);

// Specifically set the ActiveControl on the form.
this.ActiveControl = someOtherControl;
...