2012-10-14 4 views
2

J'utilise un WebBrowser System.Window.Controls (WPF) qui génère quelques anomolies ici et là.Utilisation du type dynamique

Normalement, si je veux avoir accès au document WebBrowser dans Winforms et cliquez sur un élément que je voudrais utiliser

 HtmlDocument document = webNav.webBrowser1.Document; 
     document.GetElementById("id_of_element").InvokeMember("Click"); 

Cependant, il jette WPF erreur Cannot implicitly convert type 'object' to 'System.Windows.Forms.HtmlDocument'. An explicit conversion exists (are you missing a cast?).

Je peux contourner ce problème en utilisant

 dynamic document = webNav.webBrowser1.Document; 
     document.GetElementById("id_of_element").InvokeMember("Click"); 

Y at-il une meilleure méthode/préféré ou est-ce une utilisation acceptable du type dynamique? (Y at-il des exemples d'utilisation acceptable de type dynamique?)

Répondre

4

Comme l'erreur dit, il vous manque un casting explicite:

HtmlDocument document = (HtmlDocument)webNav.webBrowser1.Document; 

En supposant que vous avez using System.Windows.Forms; en haut du fichier (pour faire le code ci-dessus plus court).

Je savais cela à cause de la ligne,

Une conversion explicite existe (vous manque un casting?)

Aucune utilisation de dynamic est nécessaire dans ce cas.

+0

Il résout l'erreur initiale pour moi. Mais plus tard quand j'utilise 'string htmlText = document.documentElement.InnerHtml.ToString();' il renvoie maintenant l'erreur ''System.Windows.Forms.HtmlDocument' 'ne contient pas de définition pour' documentElement 'et pas de méthode d'extension' documentElement ' acceptant un premier argument de type 'System.Windows.Forms.HtmlDocument' peut être trouvé (manque-t-il une directive using ou une référence d'assembly?) ' – user3357963

+1

C'est parce que cette propriété de' HtmlDocument' n'existe pas. Veuillez consulter la documentation de 'HtmlDocument' pour obtenir la liste des propriétés et méthodes qui existent: http://msdn.microsoft.com/en-us/library/system.windows.forms.htmldocument.aspx. Vous voulez probablement 'document.Body.InnerHtml' –

Questions connexes