2

问题:

我有一个 WebBrowser 并公开了它的 ActiveX 方法。在 WebBrowser 所在的表单中,我有一个带有快捷方式的 MainMenuStrip。只有当我在表单上的文本框中输入时,快捷方式才能正常工作。例如,当我按下 CTRL + N 时,我的表单的快捷方式 - 而不是打开新的表单,WebBrowser 当前所在的页面会在 IE 中打开。

我试过的:

  1. 我已经尝试使用不起作用的计时器每 100 毫秒聚焦一次表单(这无论如何都不是一个可行的选择,因为它不是很微妙,并且程序必须使用 SendKeys 等仔细导航 WebBrowser)。

  2. 浏览器代码:

    this.webBrowser1.WebBrowserShortcutsEnabled = false;
    this.webBrowser1.AllowWebBrowserDrop = false;
    this.webBrowser1.IsWebBrowserContextMenuEnabled = false;
    
  3. 从 WebBrowser 继承并覆盖 ProcessCmdKey:

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (keyData == (Keys.Control | Keys.N))
        {
            newToolStripMenuItem.PerformClick();
            return true; // or false
        }
    }
    

我想要达到的目标:

  1. WebBrowser 的快捷方式被禁用(我在某处读到 ActiveX 阻止了这种情况……为什么?)。

  2. 我想要的是,除非当前正在 WebBrowser 中键入/导航,否则表单的快捷方式可以工作。应该从 WebBrowser 获取焦点,只要在控件外部单击,而不仅仅是在其他文本框处于焦点时(例如,当在表单的空白处单击时。

4

2 回答 2

0

Try inheriting from WebBrowser control and override Control.IsInputKey. See if Ctrl+N arrives in there.

于 2013-07-29T04:02:53.393 回答
0

经过大量调查,我们才知道这是浏览器兼容性问题。

我们在 HTML 页面中添加了元标记,然后快捷方式工作正常。下面是示例代码。

<html>
<body>
<Head>
<meta http-equiv="X-UA-Compatible" content="IE=IE8" />
</head>
<form>
First name:<br>
<input type="text" name="firstname">
<br>
Last name:<br>
<input type="text" name="lastname">
</form></body>
</html>

这个问题有三种不同的解决方案。

添加元标记以使网站浏览器兼容。

覆盖“PreocessCmdKey”方法并处理快捷方式。

通过在 FEATURE_BROWSER_EMULATION 下添加密钥来模拟浏览器。

如果您不想在 html 代码中设置元标记,您可以在导航 URL 之前将元标记分配给 webbrowser 控件的 Document text 属性。下面是示例。

    //Setting compatible mode of IE.
                    this.m_oWebBrowser.DocumentText = @"<html>
                      <head><meta http-equiv=""X-UA-Compatible"" content=""IE=IE8"" /> </head>
                      <body></body>
                      </html>";
this.m_oWebBrowser.Navigate("www.google.com");
于 2015-08-05T07:52:03.283 回答