2009-10-01 6 views
0

J'utilise un EventHandler pour supprimer un menu contextuel sur un AxWebBrowser. J'utilise le code ci-dessous:Supprimer le menu contextuel dans l'objet AxWebBrowser - problème de synchronisation?

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

Il y a quatre lignes avec le commentaire "/// stop here". Si je définis un point d'arrêt à l'une de ces lignes, exécutez l'application, puis continuez après l'arrêt sur cette ligne, le menu contextuel n'apparaît pas lorsque je clique avec le bouton droit sur le contrôle. Cependant, si je place un point d'arrêt ailleurs et que je fais de même, le menu contextuel apparaît. De plus, si j'exécute l'application sans points d'arrêt, le menu contextuel apparaît.

J'ai également essayé d'affecter le gestionnaire d'événements dans une méthode distincte, appelée longtemps après tout ce qui précède est fait exécuter, mais encore une fois, le menu contextuel apparaît.

quelqu'un a une idée comment je peux comprendre mon problème?

Répondre

0

Vous devez utiliser le WinForms WebBrowser control et définir sa propriété IsWebBrowserContextMenuEnabled sur false.

Vous pouvez utiliser son Document.DomDocument pour obtenir l'objet brut MSHTML HTMLDocument.

+0

Merci pour la suggestion, mais je ne peux malheureusement pas changer le type de contrôle à WebBrowser. – Jerry

+0

Étant donné que le contrôle ne permet pas d'afficher AxWebBrowser, pourquoi ne pouvez-vous pas le modifier en WebBrowser? – SLaks

+0

Je crois que la seule raison est que le WebBrowser.Document doit être éditable. AxWebBrowser facilite l'édition du document. Je suis sûr qu'un document dans WebBrowser pourrait être rendu éditable (partie trouvée d'une solution à http://social.msdn.microsoft.com/forums/en-US/Vsexpressvcs/thread/7e6444bd-8dbc-489b-8f70-622aef381741), mais je vais devoir faire un examen complet pour m'assurer que la modification de WebBrowser ne casse aucun autre code. – Jerry

Questions connexes