#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, которое вы могли бы проверить. Это позволит вам запускать вашу логику независимо от того, какой метод использовался для генерации *