Этот вид неудачи можно было бы легко объяснить, только если вы использовали KeyDown вместо события KeyPress. Событие KeyDown сообщает о виртуальных клавишах, их имена основаны на раскладке оригинальной клавиатуры IBM PC, английской раскладке. Тип Keys
объявляет их в .NET Framework.
Событие KeyDown затем обрабатывается Windows с использованием выбранной раскладки клавиатуры. Основная функция winapi: ToUnicodeEx () . У него много аргументов, ключевые из которых lpKeyState (отслеживает клавиши-модификаторы и состояние мертвой клавиши) и dwhkl (выбранная раскладка клавиатуры). Изменение раскладки клавиатуры на вашем компьютере изменяет последний аргумент. Затем он отключает событие KeyPress, его аргумент e.KeyCode - это кодовая точка Unicode utf-16, если нажатие клавиши представляет печатный ключ.
Никогда не пытайтесь интерпретировать событие KeyDown самостоятельно. Вы должны переопределить ProcessCmdKey (), чтобы обнаружить нажатия клавиш быстрого доступа, такие как Ctrl + F1. Всегда используйте событие KeyPress для набора ключей.