如果按键序列匹配不起作用 - 网络浏览器组件
If keypress sequence matches not working - webbrowser component
我想触发代码,如果我在键盘上按 ctrl + G,它会触发我的代码!事情是,它不会工作。如果我单独点击字母 u 或 g,我的 else 会触发 grand!我做错了什么?
我的问题与其他问题不同,因为我试图从网络浏览器组件中获取按键事件。所以我必须用我得到的东西做一个按键事件,使用 document.body.keydown
添加到事件处理程序
我的代码:
Private Sub AdsDisplayer_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles AdsDisplayer.DocumentCompleted
AddHandler AdsDisplayer.Document.Body.KeyDown, AddressOf AdsDisplayer_KeyDown
End Sub
Private Sub AdsDisplayer_KeyDown(ByVal sender As Object, ByVal e As HtmlElementEventArgs)
If e.CtrlKeyPressed And Chr(e.KeyPressedCode) = "G" Then
'CTRL+G was pressed.
MsgBox("CTRL + " & Chr(e.KeyPressedCode))
Else
'SomeKey was pressed without any modifier keys.
MsgBox(Chr(e.KeyPressedCode))
End If
End Sub
编辑
我从下面的评论中试过但没有用:
If (e.KeyPressedCode And Not Keys.Modifiers) = Keys.G AndAlso e.CtrlKeyPressed = Keys.ControlKey Then
MsgBox("Ctrl + G")
End If
KeyDown 与 KeyUp
这里的问题来自于你使用的事件的时间。
您使用 KeyDown
事件,这意味着它会在 Ctrl 按下时立即触发。
使用 KeyUp
KeyUp
将能够解决这个问题,因为它会检测到您何时释放了一个键。
因此我们会得到:
Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
AddHandler WebBrowser1.Document.Body.KeyUp, AddressOf WebBrowser1_KeyUp
End Sub
然后直接按Ctrl + G如下:
Private Sub WebBrowser1_KeyUp(ByVal sender As Object, ByVal e As HtmlElementEventArgs)
If e.CtrlKeyPressed And e.KeyPressedCode = CType(Keys.G, Integer) Then
'CTRL+G was pressed.
Console.WriteLine("Here is the Ctrl + G")
Else
'Wrong combo
End If
End Sub
一般信息
在进一步研究我的这个问题时,我发现事件 Control.PreviewKeyDown
位于:https://msdn.microsoft.com/en-us/library/system.windows.forms.control.previewkeydown(v=vs.110).aspx 解决了我的问题!
由于上面(Mederic 的问题)确实有效,但仅在初始化时我不得不去寻找答案,当我在 webbrowser 组件中单击时,我的侦听器停止触发!我认为表单不再具有焦点,即使它本来是浏览器的监听器。
我的目标?
我的目标是创建一个这样的秘密组合,以便一旦按下(类似于 CTRL + A),它就会打开一个设置选项卡,最终用户可以在其中输入他们喜欢的设置,表单可以更改到。问题是,webbrowser 组件 不 带有 事件,例如KeyUp、MouseDown 等 所以你只能另辟蹊径了!我在问题中提供的示例代码是我在许多网站上找到的一种方式,但未能取悦我。如上所述,然后我遇到了名为 PreviewKeyDown 的事件,谢天谢地,webbrowser 组件可以使用!
PreviewKeyDown 如何为我工作?
回到秘密组合的想法。我 不需要 任何特殊的东西,比如 keyup 因为这个事件正是我想要的!通过将事件放置到位并连接到我的网络浏览器组件,我可以得到一个 简单的 IF 语句 来检测我按下的内容然后触发我可以调用我的 form.show (), me.hide() 序列.
出于某种原因,没有人能简单地告诉我这就是我需要节省时间寻找的事件,但我想我很高兴我最终找到了它!
我的代码
Private Sub WebBrowser1_PreviewKeyDown(sender As Object, e As PreviewKeyDownEventArgs) Handles WebBrowser1.PreviewKeyDown
If e.Control AndAlso e.KeyCode = Keys.A Then 'If control and A keys are pressed
Form.Show() 'Show new form
Me.Hide() 'Hide Current form
End If
End Sub
伙计们,就是这样!希望这对以后像我这样的人有帮助:)
我想触发代码,如果我在键盘上按 ctrl + G,它会触发我的代码!事情是,它不会工作。如果我单独点击字母 u 或 g,我的 else 会触发 grand!我做错了什么?
我的问题与其他问题不同,因为我试图从网络浏览器组件中获取按键事件。所以我必须用我得到的东西做一个按键事件,使用 document.body.keydown
添加到事件处理程序
我的代码:
Private Sub AdsDisplayer_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles AdsDisplayer.DocumentCompleted
AddHandler AdsDisplayer.Document.Body.KeyDown, AddressOf AdsDisplayer_KeyDown
End Sub
Private Sub AdsDisplayer_KeyDown(ByVal sender As Object, ByVal e As HtmlElementEventArgs)
If e.CtrlKeyPressed And Chr(e.KeyPressedCode) = "G" Then
'CTRL+G was pressed.
MsgBox("CTRL + " & Chr(e.KeyPressedCode))
Else
'SomeKey was pressed without any modifier keys.
MsgBox(Chr(e.KeyPressedCode))
End If
End Sub
编辑
我从下面的评论中试过但没有用:
If (e.KeyPressedCode And Not Keys.Modifiers) = Keys.G AndAlso e.CtrlKeyPressed = Keys.ControlKey Then
MsgBox("Ctrl + G")
End If
KeyDown 与 KeyUp
这里的问题来自于你使用的事件的时间。
您使用 KeyDown
事件,这意味着它会在 Ctrl 按下时立即触发。
使用 KeyUp
KeyUp
将能够解决这个问题,因为它会检测到您何时释放了一个键。
因此我们会得到:
Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
AddHandler WebBrowser1.Document.Body.KeyUp, AddressOf WebBrowser1_KeyUp
End Sub
然后直接按Ctrl + G如下:
Private Sub WebBrowser1_KeyUp(ByVal sender As Object, ByVal e As HtmlElementEventArgs)
If e.CtrlKeyPressed And e.KeyPressedCode = CType(Keys.G, Integer) Then
'CTRL+G was pressed.
Console.WriteLine("Here is the Ctrl + G")
Else
'Wrong combo
End If
End Sub
一般信息
在进一步研究我的这个问题时,我发现事件 Control.PreviewKeyDown
位于:https://msdn.microsoft.com/en-us/library/system.windows.forms.control.previewkeydown(v=vs.110).aspx 解决了我的问题!
由于上面(Mederic 的问题)确实有效,但仅在初始化时我不得不去寻找答案,当我在 webbrowser 组件中单击时,我的侦听器停止触发!我认为表单不再具有焦点,即使它本来是浏览器的监听器。
我的目标?
我的目标是创建一个这样的秘密组合,以便一旦按下(类似于 CTRL + A),它就会打开一个设置选项卡,最终用户可以在其中输入他们喜欢的设置,表单可以更改到。问题是,webbrowser 组件 不 带有 事件,例如KeyUp、MouseDown 等 所以你只能另辟蹊径了!我在问题中提供的示例代码是我在许多网站上找到的一种方式,但未能取悦我。如上所述,然后我遇到了名为 PreviewKeyDown 的事件,谢天谢地,webbrowser 组件可以使用!
PreviewKeyDown 如何为我工作?
回到秘密组合的想法。我 不需要 任何特殊的东西,比如 keyup 因为这个事件正是我想要的!通过将事件放置到位并连接到我的网络浏览器组件,我可以得到一个 简单的 IF 语句 来检测我按下的内容然后触发我可以调用我的 form.show (), me.hide() 序列.
出于某种原因,没有人能简单地告诉我这就是我需要节省时间寻找的事件,但我想我很高兴我最终找到了它!
我的代码
Private Sub WebBrowser1_PreviewKeyDown(sender As Object, e As PreviewKeyDownEventArgs) Handles WebBrowser1.PreviewKeyDown
If e.Control AndAlso e.KeyCode = Keys.A Then 'If control and A keys are pressed
Form.Show() 'Show new form
Me.Hide() 'Hide Current form
End If
End Sub
伙计们,就是这样!希望这对以后像我这样的人有帮助:)