如何覆盖右键单击winforms WebBrowser Control时出现的ContextMenu?

bla*_*k3r 3 .net browser contextmenu winforms

右键单击WebBrowser控件时,将出现标准IE上下文菜单,其中包含"后退","查看源"等选项.

如何显示我自己的ContextMenuStrip呢?WebBrowser.ContextMenuStrip不适用于此Control.

bla*_*k3r 5

这个网站上的很多其他解决方案听起来很难做,因为它是一个COM对象......并建议添加一个新类"ExtendedWebBrowser".对于这项任务,结果非常简单.

在添加Web浏览器控件的代码中,添加DocumentCompleted事件处理程序.

    WebBrowser webBrowser1 = new WebBrowser();
    webBrowser1.DocumentCompleted +=new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
Run Code Online (Sandbox Code Playgroud)

定义这些事件处理程序(更改contextMenuStrip以匹配您创建的名称).

    void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        WebBrowser browser = (WebBrowser) sender;
        browser.Document.ContextMenuShowing += new HtmlElementEventHandler(Document_ContextMenuShowing);
    }

    void Document_ContextMenuShowing(object sender, HtmlElementEventArgs e)
    {
        // If shift is held when right clicking we show the default IE control.
        e.ReturnValue = e.ShiftKeyPressed; // Only shows ContextMenu if shift key is pressed. 

        // If shift wasn't held, we show our own ContextMenuStrip
        if (!e.ReturnValue)
        {
            // All the MousePosition events seemed returned the offset from the form.  But, was then showed relative to Screen.
            contextMenuStripHtmlRightClick.Show(this, this.Location.X + e.MousePosition.X, this.Location.Y + e.MousePosition.Y); // make it offset of form
        }
    }
Run Code Online (Sandbox Code Playgroud)

注意:我的覆盖执行以下操作:*如果在右键单击时按住shift,则显示IE返回值.*否则显示contextMenuStripHtmlRightClick(此示例中未显示定义)