2012-02-13 21 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,并且它工作正常。