2016-01-05 78 views
0

压在VB.NET项目中的多个修改按钮和字符(在VS2013工作),我需要做一些事情,当用户按下CTRL +左SHIFT + M.如何检测VB.NET

最近我已经得到的只是能够检测修改键和M键之一。

this question here in SO,但与示例代码提供唯一的答案检测字符键和一个或另一个修改键,而不是两者。

我一直在寻找一段时间,我见过的唯一例子只显示了一个修饰键,我无法弄清楚如何检测两个修饰键和一个字符键。

这里是我目前拥有的代码:

If My.Computer.Keyboard.CtrlKeyDown AndAlso My.Computer.Keyboard.ShiftKeyDown AndAlso (e.KeyCode And Not Keys.Modifiers) = Keys.M Then 
    HideForm() 
End If 

它看起来像只KeyDown事件,这是有道理的,我想被检测的关键之一,因为该事件是要单独火每个键。

那么如何检测三个按键何时被按下?

+0

'如果e.Control AndAlso e.Shift AndAlso e.KeyCode = Keys.M Then' – LarsTech

+0

不,没有做到这一点,拉尔斯。 :(在KeyDown事件中,它只检测按下的第一个键,所以如果我按CTRL + SHIFT + M,它只会得到CRTL(e.Control对于你的代码是真的),如果我做了SHIFT + CTRL + M那么它只是得到shift键(e.Shift是真的) – marky

+0

只是澄清:它不可能(有意义)调试KeyDown事件处理程序,因为它会打破总是在第一个键按 –

回答

2

尝试使用表上给ProcessCmdKey覆盖您正在使用:

Protected Overrides Function ProcessCmdKey(ByRef msg As Message, keyData As Keys) As Boolean 
    If keyData = (Keys.Control Or Keys.Shift Or Keys.M) Then 
    ' do something 
    Return True 
    End If 
    Return MyBase.ProcessCmdKey(msg, keyData) 
End Function 
+0

宾果!这样做。 ,Lars。 – marky

+0

谢谢任何​​解释为什么在这里重写ProcessCmdKey并且KeyDown/PreviewKeyDown不工作 –

+0

@AlexB。ProcessCmdKey发生在窗体上的任何其他事物之前。不知道为什么KeyPreview = true不适用于您,但KeyPreview是从VB6开始的一个老式的保留 – LarsTech