2009-02-25 2 views
1

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

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

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

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

Идеи любой?

ответ

0

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

c# 
myButton.Focus(); 
1

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

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

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