【发布时间】:2016-07-18 04:00:55
【问题描述】:
您好,当按下一组特定的键时,我无法显示表单。主窗体先运行;这是第二种形式,在按 ctrl+alt+shift+h 切换之前应该是隐藏的。这是我拥有的代码,我相信它应该可以工作,但事实并非如此。我试过这样,在一个每 1 毫秒检查一次新闻事件的计时器中
Private Sub tmrKeys_Tick(sender As Object, e As EventArgs) Handles tmrKeys.Tick
Dim key As String = Nothing
If My.Computer.Keyboard.AltKeyDown AndAlso My.Computer.Keyboard.CtrlKeyDown AndAlso My.Computer.Keyboard.ShiftKeyDown AndAlso key = "H" Then
Dim x = New form2()
x.Show()
End If
End Sub
我还尝试了这样一个单独的函数:
Private Sub form1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
If e.Control AndAlso e.Alt AndAlso e.Shift AndAlso e.KeyCode = Keys.H Then
form2.Show()
End If
End Sub
提前感谢您的帮助。
【问题讨论】:
-
你绝对不应该使用
Timer。在任何情况下都不会。第一个问题是您是否希望此组合键仅在主窗体具有焦点时起作用,或者不管哪个窗口具有焦点。如果是后者,那么您需要使用 Windows API 来注册热键。对于前者,您的第二个代码 sn-p 是正确的,但如果表单上有可选控件,则默认情况下表单不会引发KeyDown事件。要让这样的表单引发 keybaod 事件,您必须将其KeyPreview属性设置为True。 -
无论窗体的焦点如何,都需要在按键时进行切换。
-
在这种情况下,处理表单的事件是没有用的,因为如果表单没有焦点,则无法引发这些事件。您应该查看
RegisterHotKeyAPI。您将能够通过搜索找到大量示例。只需确保您使用专门的 VB.NET 示例或对 VB6 示例进行适当的更改。
标签: .net vb.net keypress keydown