如果按键序列匹配不起作用 - webbrowser组件

时间:2017-06-07 09:34:57

标签: vb.net keypress

我想触发代码,如果我按下键盘上的ctrl + G,它会触发我的代码!事情是,它不会工作。如果我单独按下你的字母u或g,我的别人会触发盛大!我做错了什么?

我的问题与其他问题不同,因为我试图从webbrowser组件中获取一个按键事件。因此,我必须使用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

2 个答案:

答案 0 :(得分:2)

KeyDown vs 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

答案 1 :(得分:1)

一般信息

在深入研究我的这个问题时,我发现事件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 这样的特殊事件,因为这个事件正是我想要的!通过将事件放在适当的位置并挂钩到我的webbrowser组件,我可以只有一个简单的IF语句来检测我按下的内容然后触发我然后可以调用我的form.show(),我。 hide()sequence。

由于某种原因,没有人可以简单地告诉我那个事件我需要节省我的时间,但我想我很高兴我最终找到了它!

我的代码

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

多数民众赞成!希望这将有助于将来像我这样的人:)