How do you override the ContextMenu that appears when right clicking on winforms WebBrowser Control?

懵懂的女人 提交于 2019-11-29 11:45:57
blak3r

A lot of the other solutions on this site made it sound like this was very difficult to do because it was a COM object... and recommended adding a new class "ExtendedWebBrowser". For this task, it turns out to be pretty simple.

In your code which adds a web browser control, add the DocumentCompleted event handler.

    WebBrowser webBrowser1 = new WebBrowser();
    webBrowser1.DocumentCompleted +=new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);

Define these event handlers (change contextMenuStrip to match name of the one you created).

    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
        }
    }

Note: my override does the following: * if shift is held down when you right click it shows IE return value. * Otherwise it shows the contextMenuStripHtmlRightClick (definition not shown in this example)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!