WebBrowser从我的表单“窃取”KeyDown事件

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

这应该可以解决您的问题。 它禁用了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"); } } 

您可以覆盖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. }