У меня недостаточно представителей, чтобы поднять голос Тома, но он мне очень помог. Кроме того, вы должны выбрать ту же самую подрывную версию .NET Framework (кроме того, это тот же полный / основной / стандартный и т. Д.). Я указал 4.5 в тестовом проекте и получил эту ошибку, меняя ее на 4.6.1 (так же, как и другие), исправляет эту проблему.
Используйте событие KeyDown, но в этом случае проверьте наличие как Ctrl , так и C , например:
if (e.Control && e.KeyCode == Keys.C) {
//...
e.SuppressKeyPress = true;
}
Кроме того, чтобы предотвратить обработку нажатия клавиши базовым TextBox, установите для свойства SuppressKeyPress значение true, как показано.
Ключевые события происходят в следующем порядке:
Событие KeyPress не вызывается клавишами, не являющимися символами; однако клавиши без символов вызывают события KeyDown и KeyUp. Control - это не символьный ключ.
Вы можете проверить эту строку кода:
если (e.KeyData == (Keys.Control | Keys.C))
Ой! Только что разобрался. Из трех возможных событий то, что я не пробовал, мне и нужно! Событие KeyUp является важным:
private void txtConsole_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyData == (Keys.C | Keys.Control))
{
_consolePort.Write(new byte[] { 3 }, 0, 1);
e.Handled = true;
}
}
Попробуйте следующее: зафиксируйте события стрелка вверх и стрелка вниз . Когда вы обнаружите стрелку вниз для CTRL, установите флаг; когда вы обнаружите стрелку вверх , сбросьте флаг. Если вы обнаружите клавишу C , когда установлен флаг, у вас есть Ctrl + C .
Edit . Ой ... Ответ Джея определенно лучше. : -)