F10 ключ не пойман - PullRequest
       22

F10 ключ не пойман

7 голосов
/ 12 июля 2011

У меня есть Windows.Form, и там переопределяется ProcessCmdKey.Однако это работает со всеми клавишами F, кроме F10 .Я пытаюсь найти причину, по которой ProcessCmdKey не вызывается, когда я нажимаю F10 в моей форме.

Может кто-нибудь дать мне совет, как мне найти причину?

С наилучшими пожеланиями, Томас

Ответы [ 6 ]

8 голосов
/ 12 июля 2011

Windows трактует F10 по-разному. Объяснение дано в разделе «Замечания» здесь, на MSDN

1 голос
/ 12 июля 2011

Может быть, я понял вашу проблему, поэтому пытаюсь угадать:

Вы установили KeyPreview свойство вашей WindowsForm на true?

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

Дайте мне знать, если это работает, пожалуйста.

С уважением.

1 голос
/ 12 июля 2011

Я только что протестировал этот код в Windows Forms в .NET 4 и получил сообщение, как и ожидалось.

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (keyData == Keys.F10)
    {
        MessageBox.Show("F10 Pressed");
        return true;
    }
    return base.ProcessCmdKey(ref msg, keyData);
}
0 голосов
/ 02 апреля 2019

Верно, и поскольку это специальный ключ, который вы должны добавить

e.Handled = true; 

, он говорит вызывающей стороне, что вы обработали его.

Итак, ваш код может выглядеть следующим образом:

switch (e.Key)
...
case Key.System:
    if (e.SystemKey == Key.F10)
    {
        e.Handled = true;
        ... processing
    }
0 голосов
/ 07 февраля 2019

Если столкнуться с этой проблемой в приложении WPF, в этом блоге показано, как получить клавишу F10:

private void Window_KeyDown(object sender, KeyEventArgs e)
{
        if (e.SystemKey == Key.F10)
        {
            YourLogic(e.SystemKey);
        }

        switch (e.Key)
        {
            case Key.F1:
            case Key.F2:
        }
}
0 голосов
/ 15 января 2018

В моем случае я пытался сопоставить e.key с system.windows.input.key.F10, и он не работал (хотя с F1 по F9 работал)

Select Case e.Key

Case is = Key.F10
... do some stuff

end select

однако я изменил его на

Select Case e.Key

Case is = 156
... do some stuff

end select

и это сработало.

...