Проблемы с обнаружением Alt Key в событии Control.KeyUp - PullRequest
2 голосов
/ 09 февраля 2010

У меня есть элемент управления с событиями KeyDown и KeyUp, как показано ниже.Проблема, с которой я сталкиваюсь, заключается в том, что «x» имеет значение TRUE в KeyDown, но всегда FALSE в KeyUp.Я пытаюсь обнаружить клавишу Alt (как вы, наверное, догадались).

Есть ли что-то, чего я не знаю.Я имею в виду, когда я нажимаю Alt, он обнаруживает, что все в порядке, но при включении это ложно.

Любые предложения / идеи

Спасибо

    private void MyControl_KeyDown(object sender, KeyEventArgs e)
    {
        bool x;
        x = ((int) (e.KeyData & Keys.Alt) != 0);
        x = (e.KeyData & Keys.Alt) == Keys.Alt;
        x = e.Alt;
    }
    private void MyControl_KeyUp(object sender, KeyEventArgs e)
    {
        bool x;
        x = ((int) (e.KeyData & Keys.Alt) != 0);
        x = (e.KeyData & Keys.Alt) == Keys.Alt;
        x = e.Alt;
    }

Ответы [ 3 ]

6 голосов
/ 09 февраля 2010

Вы пытаетесь обнаружить событие Alt + [буква]? Это так, попробуйте это:

        private void YourControl_KeyDown(object sender, KeyEventArgs e)
        {
          if((e.Alt) & (e.KeyCode  == Keys.X))
          {
            MessageBox.Show("Alt-X pressed");
          }
        }

Для просто Alt, попробуйте это:

    private void YourControl_KeyDown(object sender, KeyEventArgs e)
    { 
        if (e.KeyCode  == Keys.Menu)
        {
            //YourCode
            e.Handled = true;
        }
    }

    private void YourControl_KeyUp(object sender, KeyEventArgs e)
    { 
        if (e.KeyData == Keys.Menu)
        {
            //YourCode
            e.Handled = true;
        }
    }
1 голос
/ 23 марта 2015

Если вы хотите обнаружить фактическое нажатие клавиши (Alt или любую другую клавишу), вы можете использовать этот код. Этот код работает в KeyUp, KeyDown и других ключевых событиях

private void YourControl_KeyDown(object sender, KeyEventArgs e)
{
   Key _key = e.Key != Key.System ? e.Key : e.SystemKey;
   // _key is your real pressed key
}
1 голос
/ 09 февраля 2010

Я надеюсь, что вы не просто устанавливаете переменную-член bool в своем классе в ответ на нажатие клавиши Alt.

Если вы хотите узнать, не нажата ли клавиша Alt во время выполнения кода в ответ на другие события (например, события мыши), используйте свойство Control.ModifierKeys , так как оно гораздо надежнее. Это также означает, что у вас нет избыточной переменной-члена.

Если вы на самом деле пытаетесь определить, нажал ли пользователь только клавишу Modifier, то решение @ bluecoder, вероятно, то, что вам нужно.

...