我设置了一个非常简单的应用程序,带有一个浏览器控件和一个带有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来显示帮助。命令键,因此得名。它不适合普通的键盘处理。
当然,你仍然会破坏浏览器中运行的脚本。它可能也想看到这样的快捷键
一定要考虑到根本问题是你的方法是坏的