2011-03-02 41 views
5

我在Form中有一个WebBwoser,我想捕获Ctrl + O组合键作为菜单项的快捷方式。我的问题是,如果我点击WebBrowser,然后按下Ctrl + O,则会弹出一个Internet Explorer对话框,而不是执行我的菜单项。我有我的FormKeyPreview属性设置为true。另外,我为KeyDown事件添加了一个事件处理程序,但在单击WebBrowser后,它不会再被调用。我怎样才能解决这个问题?WebBrowser“窃取”我的表单中的KeyDown事件

回答

7

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

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"); 
     } 
    } 
+0

嗯,是唯一可能的解决方案吗?我希望用户能够通过按Ctrl + F来执行其他操作。 – Juan 2011-03-02 08:39:10

+0

+1你通过网络速度打我,当我试图找到MSDN上的链接时,我的浏览器挂起: – 2011-03-02 08:39:58

+1

如上面我编辑的答案中所示,您可以捕获webBrowser上的'PreviewKeyDown'。 – 2011-03-02 09:15:01

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. 
}