2012-02-13 25 views
0

快捷鍵我想通過我的特定程序的快捷方式定義運行特定的代碼。例如,如果我點擊F1Ctrl + C然後我想讓我的程序顯示客戶列表。我已經嘗試過下面的代碼形式的keydown事件如何在vb.net

If e.KeyCode = Keys.F1 Then 
    Form6.button4.performclick() 
End If 

但這似乎不工作。任何人都可以幫助我嗎?

我使用Visual Studio 2005中vb.net開發我的應用程序

+1

您的命名是可怕的。人們應該怎麼知道#6表單#6的按鈕? – 2012-02-13 19:54:05

+1

在Windows中保留'F1'來尋求幫助。 「Ctrl + C」通常用於「剪貼板複製」。這些特定的關鍵選擇可能是一個壞主意。 – 2012-02-13 19:56:59

+0

我也嘗試過其他按鍵,比如'O'或'F4',但這也不起作用...Form6是查看客戶和按鈕的表單4點擊事件包含打印客戶列表的代碼 – user944591 2012-02-13 20:06:37

回答

0

我更喜歡通過添加快捷方式菜單來實現快捷方式,添加菜單項的每個快捷方式,然後在快捷方式綁定到菜單項。這很好,因爲它記錄了可用的快捷方式,並使編碼變得非常簡單。

2

「訪問鍵是在一個菜單,菜單項或控制的,如按鈕標籤的文本中帶下劃線的字符。訪問鍵,用戶可以‘按ALT點擊’按鈕與所述預定義的訪問鍵組合鍵。例如,如果一個按鈕運行一個過程來打印形式,因此,其文本屬性被設置爲「打印」的字母之前加入一個與符號「P」使字母「P」在運行時在按鈕文本中加下劃線,用戶可以通過按ALT + P運行與該按鈕相關的命令,對於無法獲得焦點的控件,您不能擁有訪問鍵。

Access Keys

嘗試訪問鍵?

0

你的代碼是正確的,但你應該設置keyPreview = true在表單

4

試試這個:

Private Sub frmCustomerDetails_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    ' When the form loads, the KeyPreview property is set to True. 
    ' This lets the form capture keyboard events before 
    ' any other element in the form. 
    Me.KeyPreview = True 
End Sub 

    Private Sub frmCustomerDetails_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown 
    If (e.Alt AndAlso (e.KeyCode = Keys.P)) Then 
     ' When Alt + P is pressed, the Click event for the print 
     ' button is raised. 
     RaiseEvent btnPrintCustomerDetails.Click 
    End If 
End Sub 

Source

雖然,你最好能夠創建自己的事件,並提高該而不是提高按鈕的點擊事件。

0

我看到的答案上市,這是很老,但嘗試。如圖所示,熱鍵被設置爲alt + d或alt + c。他們給你的東西和我給你的東西之間的代碼差別在於,即使在應用程序被最小化的情況下,它也能正常工作。

Public Const MOD_ALT As Integer = &H1   'Alt key 
Public Const WM_HOTKEY As Integer = &H312  ' 


<DllImport("User32.dll")> _ 
Public Shared Function RegisterHotKey(ByVal hwnd As IntPtr, ByVal id As Integer, ByVal fsModifiers As Integer, ByVal vk As Integer) As Integer 
End Function 

<DllImport("User32.dll")> _ 
Public Shared Function UnregisterHotKey(ByVal hwnd As IntPtr, ByVal id As Integer) As Integer 
End Function 

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) 
    If m.Msg = WM_HOTKEY Then 
     Dim id As IntPtr = m.WParam 
     Select Case (id.ToString) 
      Case "100" 
       MessageBox.Show("You pressed ALT+D key combination") 
      Case "200" 
       MessageBox.Show("You pressed ALT+C key combination") 
     End Select 
    End If 
    MyBase.WndProc(m) 
End Sub 

Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing 
    UnregisterHotKey(Me.Handle, 100) 
    UnregisterHotKey(Me.Handle, 200) 
End Sub 


Private Sub Form_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
    RegisterHotKey(Me.Handle, 100, MOD_ALT, Keys.D) 
    RegisterHotKey(Me.Handle, 200, MOD_ALT, Keys.C) 
end sub 
+0

「阿門阿亞奇」你的對。這是需要的,對於監督感到抱歉。 – jcaruso 2013-04-12 14:04:34

+0

「SpectralGhost」&'Barry Franklin'可以工作,但在應用程序最小化時可用嗎?我不這麼認爲。實施要麼取決於你的應用程序,要麼你的客戶想要什麼。 – jcaruso 2013-04-12 14:06:08

1

這是一個非常簡單的方式做這樣的事情:

Private Sub RichTextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles RichTextBox1.KeyPress 

    If Keys.T + Keys.ControlKey Then 
     TextBox1.Text = RichTextBox1.SelectedText  
    End If 

End Sub 

這是自2010年雖然。

0

我遇到過相同的情況,我使用menustrip和簽名shortkeys並使用performclick函數並將menustrip的屬性設置爲可見false,並且它工作正常。