WinForms Accept Button Раздражение - PullRequest
1 голос
/ 25 февраля 2009

У меня есть базовый класс панели, который имеет (среди прочего) три кнопки. Я использую подклассы этого базового класса в двух разных диалогах конфигурации. В обоих диалогах кнопка ОК установлена ​​как кнопка подтверждения.

В одном из диалоговых окон, если я нажму одну из кнопок в базовом классе, фокус немедленно вернется к кнопке ОК, поэтому нажатие клавиши ввода работает, как и ожидалось.

В другом диалоге фокус остается с кнопкой в ​​базовом классе, которая была нажата, если она включена, или переходит к следующей кнопке, если кнопка больше не активирована.

В любом из производных классов нет кода, который обрабатывал бы события нажатия кнопок базового класса.

Идеи кому-нибудь?

Ответы [ 2 ]

1 голос
/ 25 февраля 2009

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

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

В любом случае, я думаю, что, как правило, предпочтительнее придерживаться рекомендаций по пользовательскому интерфейсу Windows, а не автоматически менять фокус ввода назад на кнопку ОК. Если пользователь нажимает на одну из других кнопок, фокус должен оставаться там, пока он не переместит его.

0 голосов
/ 25 февраля 2009

Я не знаю, какой язык вы используете, но у класса кнопок должен быть метод focus, который будет подсвечивать его при нажатии клавиши Enter. в методе click или при открытии диалогового окна вы можете вызвать этот метод, чтобы сделать нужную кнопку, чтобы получить фокус формы

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