2013-10-25 4 views
0

Как я могу отправить строку/сообщение, когда одновременно были нажаты несколько клавиш? Ive попробовал как And, так и Andalso, но в результате для всплытия этого msgbox требуется только первый ключ.Одновременное нажатие нескольких клавиш

Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, _ 
             ByVal keyData As System.Windows.Forms.Keys) _ 
             As Boolean 
     If msg.WParam.ToInt32() = CInt(Keys.ShiftKey) AndAlso CInt(Keys.A) Then 
      MsgBox("Testing") 
      Return True 
     End If 

     Return MyBase.ProcessCmdKey(msg, keyData) 
End Function 
+0

AndAlso CInt (Keys.A) не имеет (реальное) значение, насколько это всегда верно (CInt (ключи. A) существует всегда). Вы должны искать WParam, связанный с комбинацией ShiftKey + A. – varocarbas

ответ

2

Вы можете просто сделать:

Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, _ 
            ByVal keyData As System.Windows.Forms.Keys) _ 
            As Boolean 
    If keyData = (Keys.Shift Or Keys.A) Then 
     MessageBox.Show("Shift-A") 
     Return True 
    End If 

    Return MyBase.ProcessCmdKey(msg, keyData) 
End Function 

Обратите внимание, что это

+0

есть, это работает. Но я не понимаю, как «Или» может работать в этом состоянии. Не означает ли «или», что если какая-либо из клавиш нажата, условие становится истинным? – rip2444

+0

Нет. В этом случае «Or» выполняет побитную операцию ** по двум числовым значениям (коды клавиш для Shift и A). См. [Побитовые операции] (http://msdn.microsoft.com/en-us/library/wz3k228a (v = vs.90) .aspx). –

Смежные вопросы