2010-06-28 2 views
1

Étant donné que vous ne pouvez l'affecter qu'après le chargement du document et que vous n'avez pas besoin de l'assigner chaque fois qu'un document est chargé, n'ai-je pas d'autre choix que de faire quelque chose comme ça?Comment bien affecter un gestionnaire d'événements à HtmlDocument.MouseDown en C#?

private void WebBrowser_DocumentCompleted(object sender, 
    WebBrowserDocumentCompletedEventArgs e) 
{ 
    if (!mouseDownAssigned) // mouseDownAssigned is a bool with start value false 
    { 
     mouseDownAssigned = true; 
     this.Document.MouseDown += 
      new HtmlElementEventHandler(Document_MouseDown); 
    } 
} 

Ce qui est plutôt laide et pas élégant. J'ai l'impression que ce n'est pas ce que Microsoft avait en tête.

+0

ne me semble pas si mal. Quel type de code considérez-vous comme plus "élégant"? –

+0

J'ai eu le même problème ... J'ai dû trouver une autre façon de faire ce que je voulais, que voulez-vous faire? – Luiscencio

Répondre

0

Je pense que c'est le plus proche d'une solution élégante:

public MyWebBrowser() 
    { 
     InitializeComponent(); 
     this.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(SuperWebBrowser_DocumentCompleted); 
     this.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(SuperWebBrowser_DocumentFirstCompleted); 
    } 

    private void SuperWebBrowser_DocumentFirstCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 
     this.DocumentCompleted -= new WebBrowserDocumentCompletedEventHandler(SuperWebBrowser_DocumentFirstCompleted); 
     this.Document.MouseDown += new HtmlElementEventHandler(Document_MouseDown); 
    } 

    private void SuperWebBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 
    } 

De cette façon, je ne suis pas besoin de vérifier une variable chaque fois qu'un document est terminé. Je suppose que c'est un peu ce que Microsoft avait en tête.

0

Je ne crois pas que ce soit ce que MS avait en tête non plus. Si je devais deviner, cela vient du fait qu'il existe une sorte de proxy entre le document et le navigateur web qui gère les événements qui ne sont initialisés que lorsque le premier document est chargé, au lieu de quand le contrôle est chargé.

Questions connexes