0

我设置了一个非常简单的应用程序,其中包含一个 webbrowser 控件和一个带有 2 个按钮和一个用于输入 url 的文本框的不可见面板。

当我启动应用程序时,即使使用像这样简单得离谱的代码,再多的按键也无济于事。

  Private Sub Frm_Main_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    My.Settings.Reload()
    Dim URL As New Uri(Application.StartupPath & "\" & My.Settings.path)
    WebBrowser1.Url = URL
    TXT_URL.Text = My.Settings.path
    Me.KeyPreview = True
 End Sub



Private Sub Frm_Main_KeyUp(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp
    Beep()
End Sub

但是,如果我单击菜单选项以显示面板,然后立即单击面板上的按钮以设置 pnl_url.visible=false,那么我可以按键并从 keyup 例程获得响应。

有任何想法吗?我不知道该怎么做才能让应用程序开始接受击键而不强迫用户单击某些东西。me.focus 或 'control'.focus 也没有做任何事情。

用 Visual Studio 2010 编写

** * ** * ** * ** * ** * ** * *编辑* ** * ** * ** * ** * ** * ** * ** * ** * *** 我有发现是网络浏览器控件阻塞了它,但不知道如何让它合作。我的一个朋友帮我修好了。

        Private Sub WebBrowser1_PreviewKeyDown(sender As Object, e As System.Windows.Forms.PreviewKeyDownEventArgs) Handles WebBrowser1.PreviewKeyDown
        Dim ee As New KeyEventArgs(e.KeyData)

        Me.Frm_Main_KeyUp(sender, ee)
    End Sub
4

1 回答 1

1

这是错误的,因为当您的应用程序启动时,Web 浏览器具有焦点。浏览器实现了自己的运行时环境,它也对击键感兴趣。例如,Javascript 可以访问关键事件。通过使用面板进行操作,您可能最终将焦点放在另一个控件上,现在 KeyUp 事件起作用了。

您将需要比 Form.KeyPreview 更大的武器。您还可以覆盖表单的 ProcessCmdKey() 方法。即使浏览器获得焦点,它也会运行。但是请注意,此方法旨在允许您实现快捷键。就像按 F1 显示帮助一样。命令键,因此得名。它不适合正常的键盘处理。

当然,您仍然会破坏浏览器中运行的任何脚本。可能也希望看到这样的快捷键。

请考虑根本问题是您的方法被破坏了。

于 2013-06-01T21:57:27.890 回答