2016-01-05 47 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