【发布时间】:2013-07-08 22:58:58
【问题描述】:
问题:
我有一个 WebBrowser 并公开了它的 ActiveX 方法。在 WebBrowser 所在的表单中,我有一个带有快捷方式的 MainMenuStrip。只有当我在表单上的文本框中输入时,快捷方式才能正常工作。例如,当我按 CTRL + N 时,我的表单的快捷方式 - 而不是打开新的表单,WebBrowser 当前所在的页面会在 IE 中打开。
我的尝试:
我尝试使用不起作用的计时器每 100 毫秒聚焦一次表单(无论如何,这不是一个可行的选择,因为它不是很微妙,并且程序必须使用 SendKeys 等仔细导航 WebBrowser) .
-
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 获取焦点,而不仅仅是在其他文本框处于焦点时(例如,在表单的空白处点击时。
【问题讨论】:
-
你能澄清一下公开它的 ActiveX 方法是什么意思吗?
-
@EvanHarper,我试一试:private SHDocVw.WebBrowser_V1 Web_V1; Web_V1 = (SHDocVw.WebBrowser_V1)webBrowser1.ActiveXInstance;至少那是代码。我不确定我是否完全理解它!
-
代码真的做任何与它所编造的 Web_V1 引用有关的事情吗?这是重要的部分。
-
是的,我稍后使用它来获取您需要为其公开 ActiveXInterface 的 mshtml.Document,因为无法正常从 System.Windows.Forms.WebBrowser.HtmlDocument 转换为 mshtml.HTMLDocument。请说这是否不必要,因为它很不方便。
标签: c# winforms browser keyboard-shortcuts menustrip