Привязать несколько ключей к событию нажатия клавиши (Shift * (звездочка))

#c# #.net #windows #winforms #keydown

#c# #.net #Windows #винформы #нажатие клавиши #winforms

Вопрос:

Я пытаюсь привязать несколько клавиш к событию KeyDown для изменения переменной bool, но, похоже, я не могу понять, как вызвать клавишу asterisk / star (*) с помощью левой клавиши Shift в следующем коде:

 protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (keyData == Keys.Multiply || keyData == (Keys.LShiftKey | Keys.OemQuotes))
    {
        Valgt = true;
    }
}
  

Ответ №1:

Этот ответ не будет неизменным для раскладки клавиатуры, но это помогло бы на клавиатуре US-EN. Это ненадежно, но может быть адаптировано к вашему локальному макету.

 if (keyData == Keys.Multiply || keyData == (Keys.Shift | Keys.D8))
{
    Valgt = true;
}
  

В качестве альтернативы вы можете использовать событие Control_KeyPress

 private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{            
    if (e.KeyChar == '*')
    {
        Valgt = true;
    }
}
  

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

1. Спасибо, но я уже принял во внимание US-keyboard, как вы предложили. Я ищу универсальную звездочку (*) 🙂

2. Другим отличием моего кода от вашего было использование ключей. Сдвиг в отличие от клавиш. LShift. Если вы прервете свой отладчик на предложенной строке и оцените KeyData, вы увидите эти ключи. LShift вычисляет значение false, где в качестве ключей. Значение Shift равно true. Это решение обрабатывает случай нажатия клавиши * на цифровой панели, а также Shift и цифры 8. Какой дополнительный способ создания звездочки вы искали?

3. Я искал универсальное обнаружение ключа asterisk. У меня датская раскладка клавиатуры, и моя звездочка расположена не на кнопке «номер 8», а на кнопке «Одинарная кавычка / двойные кавычки» рядом с кнопкой «Ввод». Я надеялся на универсальное решение для обнаружения ключа asterisk.

4. Как насчет использования события Control_KeyPress вместо ProcessCmdKey. KeyPressEventArgs содержит свойство KeyChar, которое вы могли бы проверить. Это позволит вам запускать вашу логику независимо от того, какой метод использовался для генерации *