我.Keyup不工作,除非我使面板可见,然后单击按钮关闭它



我设置了一个非常简单的应用程序,带有一个浏览器控件和一个带有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。可见=false,然后我可以按下键并从keyup例程获得响应。

任何想法?我不知道该怎么做才能让应用开始接受按键而不强迫用户点击什么。我。专注或"控制"。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

这是错误的,因为web浏览器有焦点时,你的应用程序启动。浏览器实现了自己的运行时环境,该环境也对击键感兴趣。例如,Javascript可以访问一个关键事件。通过摆弄你的面板,你可能最终给了另一个控件焦点,现在KeyUp事件工作。

你需要一个比Form.KeyPreview更大的武器。您还可以覆盖表单的ProcessCmdKey()方法。即使浏览器有焦点,它也会运行。但是要注意,这个方法的目的是允许您实现快捷键。比如按F1来显示帮助。命令键,因此得名。它不适合普通的键盘处理。

当然,你仍然会破坏浏览器中运行的脚本。它可能也想看到这样的快捷键

一定要考虑到根本问题是你的方法是坏的

相关内容

  • 没有找到相关文章

最新更新