如何在vb.net中制作快捷键

时间:2012-02-13 19:52:25

标签: vb.net winforms keyboard-shortcuts

我想通过为我的特定程序定义的快捷方式运行特定代码。例如,如果我单击 F1 Ctrl + C ,那么我希望我的程序显示客户列表。我已经尝试了使用以下代码

的form的keydown事件
If e.KeyCode = Keys.F1 Then
    Form6.button4.performclick()
End If

但这似乎不起作用。任何人都可以帮助我吗?

我在visual studio 2005中使用vb.net来开发我的应用程序

8 个答案:

答案 0 :(得分: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

虽然,你最好创建自己的事件并提高它,而不是提升按钮的点击事件。

答案 1 :(得分:2)

“访问键是菜单,菜单项或控件(如按钮)标签中带下划线的字符。使用访问键,用户可以通过按ALT键”单击“按钮结合预定义的访问键。例如,如果一个按钮运行一个打印表单的过程,因此其Text属性设置为“Print”,在字母“P”之前添加一个&符号会导致字母“P”在运行时在按钮文本中加下划线。用户可以通过按ALT + P来运行与按钮关联的命令。对于无法获得焦点的控件,您不能拥有访问键。“

Access Keys

尝试访问密钥?

答案 2 :(得分:1)

答案 3 :(得分: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年开始的。

答案 4 :(得分:0)

我更喜欢通过为快捷方式添加菜单,为每个快捷方式添加菜单项,然后将快捷方式绑定到菜单项来实现快捷方式。这很好,因为它记录了可用的快捷方式,使编码变得非常简单。

答案 5 :(得分:0)

您的代码是正确的,但您应在表单中设置keyPreview = true

答案 6 :(得分: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

答案 7 :(得分:0)

我遇到了相同的情况,我使用了menustrip和asigned shortkeys并使用了performclick函数并将menustrip的属性设置为可见false并且工作正常。