2017-07-28 4 views
0

J'essaie d'ajouter un nouveau gestionnaire d'événements clic-souris manuellement à mon contrôle de navigateur Web, car le navigateur Web n'a pas d'événement de clic de souris dans ses propriétés de concepteur.C# UserControl, Ajouter un gestionnaire d'événements manuellement

Je dois exécuter un code chaque fois que l'utilisateur clique dans le contrôle du navigateur Web. Cette solution de contournement ajoute dans le gestionnaire que le navigateur Web n'a pas à travers son gestionnaire d'événements DocumentCompleted existant. Lorsque j'exécute le code ci-dessous, il renvoie une exception null. Je me demande s'il est possible de le faire de cette façon.

EDIT: J'ai ajouté une boucle while pour m'assurer que webbrowser1 termine le chargement. Cependant, maintenant il reste coincé dans la boucle while. Cela signifie-t-il que le chargement de la page Web n'est jamais terminé?

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    try 
    { 
     while (webBrowser1.ReadyState != WebBrowserReadyState.Complete) 
     { 
      Application.DoEvents(); 
     } 
     webBrowser1.Document.Body.MouseDown += new HtmlElementEventHandler(Body_MouseDown); 
    } 
    catch (Exception ex) 
    { 
     Debug.WriteLine(ex.StackTrace); 
     Debug.WriteLine(ex.Message); 
    } 
} 

private void Body_MouseDown(Object sender, HtmlElementEventArgs e) 
{ 
    if(e.MouseButtonsPressed == MouseButtons.Left) 
    { 
     MessageBox.Show("File in web browser selected"); 
    } 
} 
+0

Cela peut se produire si votre '' Document' ou Body' dans la page que vous hébergez n'est pas complètement chargé. Avez-vous essayé d'ajouter une vérification de condition pour que 'webBrowser1'' ReadyState' soit 'WebBrowserReadyState.Complete' avant d'ajouter un gestionnaire? – praty

+0

Après avoir ajouté je me rends compte que 'webBrowser1' n'est pas dans' WebBrowserReadyState.Complete' et le gestionnaire d'événements dont j'ai besoin n'est pas ajouté. Comment puis-je m'assurer qu'il figure dans 'WebBrowserReadyState.Complete'? – CodeCafe

+0

'while (webBrowser1.ReadyState! = WebBrowserReadyState.Complete) { Application.DoEvents(); } 'J'ai essayé, mais le code reste bloqué en boucle. – CodeCafe

Répondre

0

Votre code doit ressembler à:

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    if (webBrowser1.ReadyState == WebBrowserReadyState.Complete) 
    { 
     webBrowser1.Document.Body.MouseDown += new HtmlElementEventHandler(Body_MouseDown); 
    } 
} 
+0

Merci Praty, j'ai essayé le sien mais l'événement n'est jamais ajouté car le webbrowser n'est jamais prêt. – CodeCafe

+0

Ceci est rare! Ce que je suggère est debug et voir à quel état vous avez 'Document' et' Body' comme non nul et changer la condition en conséquence. – praty