【问题标题】:WebBrowser "steals" KeyDown events from my formWebBrowser 从我的表单中“窃取” KeyDown 事件
【发布时间】:2011-03-02 08:22:03
【问题描述】:

我在Form 中有一个WebBwoser,我想捕获 Ctrl+O 组合键以用作菜单项的快捷方式。我的问题是,如果我单击WebBrowser 并按Ctrl+O,则会弹出一个Internet Explorer 对话框,而不是执行我的菜单项的操作。我将FormKeyPreview 属性设置为true。此外,我为KeyDown 事件添加了一个事件处理程序,但在我单击WebBrowser 后它停止被调用。我该如何解决这个问题?

【问题讨论】:

    标签: c# .net winforms webbrowser-control


    【解决方案1】:

    这应该可以解决您的问题。它禁用了网络浏览器的加速键。

    webBrowser1.WebBrowserShortcutsEnabled = false;
    

    您可能还想了解是否还需要IsWebBrowserContextMenuEnabled

    如果您需要一些加速键在浏览器上处于活动状态,以下内容也可以解决您的问题。但是,这种方法需要一些东西来捕捉焦点。 MessageBox.Show()dialog.ShowDialog() 可以完成这项工作

        private void DoSomething()
        {
            webBrowser1.PreviewKeyDown += new PreviewKeyDownEventHandler(webBrowser1_PreviewKeyDown);
        }
        private void webBrowser1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            if (e.Control && e.KeyCode == Keys.O)
            {
                menuItem.PerformClick();
                // MessageBox.Show("Done");
            }
        }
    

    【讨论】:

    • 嗯,这是唯一可能的解决方案吗?我希望用户能够通过按 Ctrl+F 来执行其他操作,例如搜索。
    • +1 你在网速上打败了我,当我试图在 MSDN 上找到链接时,我的浏览器挂起 :(
    • 您可以在webBrowser 上捕获PreviewKeyDown,如上面我编辑的答案所示。
    • 如果 webBrowser1.WebBrowserShortcutsEnabled 属性为 true,我会收到两次 PreviewKeyDown 调用。将其设置为 false 只会在每次真正的按键时生成一个。
    • 那个Webbrowser!。总是开玩笑。
    【解决方案2】:

    您可以覆盖 ProcessCmdKey 方法:

    protected override bool ProcessCmdKey(ref Meassage msg, Keys keyDaya)
    {
        //Trap for Key down 
    
        return true; //false if you want to suppress the key press.
    }
    

    【讨论】:

      猜你喜欢
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多