Отключение клавиши F10 от перемещения фокуса в строку меню в программе C # Winforms

#c# #winforms #focus

#c# #winforms #фокус

Вопрос:

Когда я нажимаю клавишу F10 в своей программе, фокус теряется из главного окна моей программы и перемещается в строку меню. Оказывается, это странное поведение распространено во многих приложениях Windows.

Я думаю, это некрасиво, потому что клавиша Alt делает то же самое, и мы теряем драгоценную функциональную клавишу. Почему Windows делает это и как я могу решить проблему для моего приложения на C #?

Комментарии:

1. К вашему сведению, такое поведение для сочетания клавиш F10 существует, по крайней мере, с Windows XP: support.microsoft.com/kb/301583

2. Будьте осторожны при изменении «уродливого» поведения, которого привыкли ожидать ваши пользователи.

Ответ №1:

Используйте событие KeyDown для своей формы и обрабатывайте нажатие клавиши:

 private void form_KeyDown(object sender, KeyEventArgs e)
{ if(e.KeyData == Keys.F10)
    {
        // Do what you want with the F10 key
        e.SuppressKeyPress = true;
    }
}
  

Также убедитесь, что для вашего forms KeyPreview установлено значение true.

Комментарии:

1. @Mark, на самом деле Дэн (OP) внес исправления. Поскольку у него нет прав на редактирование, я просто помог его изменениям закрепиться.

2. Никаких проблем — я просто благодарен за ответ! 🙂

Ответ №2:

это может решить проблему за вас

http://geekswithblogs.net/aghausman/archive/2009/04/26/disable-special-keys-in-win-app-c.aspx

Комментарии:

1. Этот подход предназначен для более сложного случая, когда вы хотите переопределить сочетания клавиш «system», например, Windows key D.

Ответ №3:

я использовал приведенный ниже трюк:

 SendKeys.Send("Alt"); 
  

этот код освобождает форму от клавиши F10.