Событие KeyUp фактически не запускается (для всех клавиш, а не только для клавиш со стрелками и т. Д.), Пока вы не отпустите клавишу, есть только много повторных событий KeyDown. По крайней мере, так мне кажется из некоторого тестового кода.
Мой обходной путь - отключить обработчик KeyDown после обнаружения события KeyDown с помощью
RemoveHandler Me.KeyDown, AddressOf Form1_KeyDown
и повторное включение при возникновении события KeyUP.
AddHandler Me.KeyDown, AddressOf Form1_KeyDown
Конечно, если вы хотите обрабатывать несколько нажатий одновременно, это не сработает. Вам нужно будет сохранить информацию о том, был ли данный ключ отключен, и игнорировать соответствующее событие KeyDown.