Точка останова, влияющая на ProcessCmdKey Обработка keyData - PullRequest
1 голос
/ 12 сентября 2009

Может кто-нибудь объяснить, почему проверка для клавиши Alt + Стрелка влево запускается при нажатии клавиши Alt + Стрелка вправо в методе ProcessCmdKey? Когда я изначально кодировал этот метод, все работало. Я начинаю расспрашивать всех моих ключевых обработчиков, но хотел узнать, было ли хорошее объяснение или я что-то упустил. Все остальные комбинации клавиш работают как положено.

Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean
    If (keyData And Keys.Alt) = Keys.Alt Then
        If (keyData And Keys.Left) = Keys.Left Then
            'when Alt+Right key is pressed
            '   this executes, except when a breakpoint is set anywhere within this method
            '   this still executes in released code
            Debug.WriteLine("WTF!")
        End If
    End If
    Return MyBase.ProcessCmdKey(msg, keyData)
End Function

Обходной путь - проверить нажатие клавиши как If keyData = (Keys.Alt Or Keys.Left) Then

[обновление] Ах, я понял. Спасибо, Митч. Я проверил это, но пропустил.

? convert.ToString(Keys.Left, 2)
"100101"
? convert.ToString(Keys.Right,2)
"100111"

Еще хотелось бы знать, почему попадание в точку останова меняет поведение.

[обновление] Еще раз спасибо Митч. Поскольку это не было воспроизведено для вас, я подозреваю, что файл решений .suo поврежден. Я удалил этот файл, и теперь попадание на точку останова никак не влияет.

1 Ответ

0 голосов
/ 12 сентября 2009
Keys.Left  = 37 = 32 + 4     + 1
Keys.Right = 39 = 32 + 4 + 2 + 1

Таким образом, поразрядно, Keys.Right включает Key.Left. Поэтому And ing с Keys.Left возвращает True в любом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...