2015-12-08 51 views
2

我在vb.net 2010.在我的winforms應用程序中,我有一個menuItem單擊事件處理程序,可以通過鼠標單擊或鍵盤快捷鍵調用。怎樣在我的處理程序告訴從鼠標點擊名爲VS鍵盤快捷鍵確定鼠標點擊與菜單項上的鍵盤快捷鍵

Private Sub myToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles myMenuItemClick 
    Dim MouseClicked As Boolean 
    MouseClicked = ?? how to make the distinction how handler was called ?? 
    If MouseClicked Then 
     lblClicked.Text = "Mouse Click" 
    Else 
     lblClicked.Text = "Key board shortcut" 
    End If 
End Sub 
+0

@Plutonix:我想要一些操作只有在通過鍵盤快捷方式調用時纔會執行。如果你想要發生不同的事情,你應該怎麼做才能使用menuopening事件 – glant

+0

指定更多的區別,你應該使用2種方法,一種可能會調用另一種(對用戶而言較不迷惑)。您*可能*能夠在dropdownopening事件中設置一個標誌,並在點擊時設置該標誌。但他們也可以使用Alt鍵打開菜單並選擇箭頭,或者用快捷鍵打開頂級菜單,打開菜單並設置標誌。 – Plutonix

+0

作爲一名應用程序用戶,我會對鍵盤快捷鍵和鼠標點擊之間的不同行爲感到困惑和困惑。觸摸屏怎麼樣?他們會有不同的行爲嗎? –

回答

1

您可以處理形式的ProcessCmdKey併爲您的快捷方式,如果按下快捷鍵,返回true。這種方式點擊只會通過點擊而不是通過快捷方式提高:

Private Sub NewToolStripMenuItem_Click(sender As Object, e As EventArgs) _ 
    Handles NewToolStripMenuItem.Click 

    MessageBox.Show("Click") 
End Sub 

Protected Overrides Function ProcessCmdKey(ByRef msg As Message, keyData As Keys) _ 
    As Boolean 

    If (Me.NewToolStripMenuItem.ShortcutKeys = keyData) Then 
     MessageBox.Show("ShortCut") 
     Return True 
    End If 
    Return MyBase.ProcessCmdKey(msg, keyData) 
End Function 
+0

通常工作,但有一些用戶操作可以解決此問題,例如按鈕上的MouseDown,然後在MouseUp之前移開鼠標,然後使用鍵盤快捷鍵。您可以通過在按鈕的MouseLeave處理程序中設置mouseDown = false來解決此問題。 –

+0

@TonyHinkle你是對的,但它不能解決這個問題。因爲你可能會倒下,然後離開(仍然下來),然後進入,然後向上。 –

+0

@TonyHinkle我編輯了答案,希望你覺得它有用:) –