抑制AxWebBrowser对象中的上下文菜单 - 计时问题?

时间:2009-10-01 19:25:32

标签: c# debugging event-handling

我使用EventHandler来抑制AxWebBrowser上的上下文菜单。我使用下面的代码:

public class HtmlEditor : System.Windows.Forms.UserControl
{
    ...
    ...
    private AxSHDocVw.AxWebBrowser axWebBrowser1;
    ...
    ...
    public HtmlEditor()
    {
        InitializeComponent();
        axWebBrowser1.DocumentComplete +=new AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEventHandler(axWebBrowser1_DocumentComplete);
        axWebBrowser1.Navigate("about:blank");
        axWebBrowser1.BeforeNavigate2 +=new AxSHDocVw.DWebBrowserEvents2_BeforeNavigate2EventHandler(axWebBrowser1_BeforeNavigate2);
        mshtml.HTMLDocumentClass doc = (mshtml.HTMLDocumentClass)this.axWebBrowser1.Document;///stop here
        doc.designMode = "On";  // This turns the control into an editor ///stop here
        ((mshtml.HTMLDocumentEvents2_Event)this.axWebBrowser1.Document).oncontextmenu += new mshtml.HTMLDocumentEvents2_oncontextmenuEventHandler(HtmlEditor_oncontextmenu); //suppress context menu ///stop here
        Dirty = false;///stop here
    }

    private bool HtmlEditor_oncontextmenu(mshtml.IHTMLEventObj e)
    {
        return false;
    }
    ...
    ...
}

有四行评论“///在此处停止”。如果我在这些行中的任何一行设置断点,运行应用程序,然后在我停在该行后继续,然后右键单击该控件时不会出现上下文菜单。但是,如果我在其他任何地方放置断点并执行相同操作,则会出现上下文菜单。此外,如果我在没有断点的情况下运行应用程序,则会出现上下文菜单。

我还尝试在一个单独的方法中分配EventHandler,在完成上述所有操作后调用long,但同样会出现上下文菜单。

任何人都知道如何解决我的问题?

1 个答案:

答案 0 :(得分:0)

您应该使用WinForms WebBrowser control并将其IsWebBrowserContextMenuEnabled属性设置为false。

您可以使用其Document.DomDocument获取原始MSHTML HTMLDocument对象。