问题:
我有一个 WebBrowser 并公开了它的 ActiveX 方法。在 WebBrowser 所在的表单中,我有一个带有快捷方式的 MainMenuStrip。只有当我在表单上的文本框中输入时,快捷方式才能正常工作。例如,当我按下 CTRL + N 时,我的表单的快捷方式 - 而不是打开新的表单,WebBrowser 当前所在的页面会在 IE 中打开。
我试过的:
我已经尝试使用不起作用的计时器每 100 毫秒聚焦一次表单(这无论如何都不是一个可行的选择,因为它不是很微妙,并且程序必须使用 SendKeys 等仔细导航 WebBrowser)。
浏览器代码:
this.webBrowser1.WebBrowserShortcutsEnabled = false; this.webBrowser1.AllowWebBrowserDrop = false; this.webBrowser1.IsWebBrowserContextMenuEnabled = false;
从 WebBrowser 继承并覆盖 ProcessCmdKey:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { if (keyData == (Keys.Control | Keys.N)) { newToolStripMenuItem.PerformClick(); return true; // or false } }
我想要达到的目标:
WebBrowser 的快捷方式被禁用(我在某处读到 ActiveX 阻止了这种情况……为什么?)。
我想要的是,除非当前正在 WebBrowser 中键入/导航,否则表单的快捷方式可以工作。应该从 WebBrowser 获取焦点,只要在控件外部单击,而不仅仅是在其他文本框处于焦点时(例如,当在表单的空白处单击时。