2010-05-16 7 views
0

Dans un programme C# WPF I'am essayer de définir la valeur d'un élément HTML Text qui est défini:Réglage texte HTML Valeur de l'élément

<input name="tbBName" type="text" id="tbBName" tabindex="1" /> 

J'ai essayé les éléments suivants:

mshtml.HTMLDocument doc = (mshtml.HTMLDocument)webBrowser1.Document; 
mshtml.HTMLInputTextElement tbName = (mshtml.HTMLInputTextElement)doc.getElementsByName("tbBName"); 
tbName.value = "Test"; 

Mais Je reçois l'exception suivante:

Unable to cast COM object of type 'System.__ComObject' to interface type 'mshtml.HTMLInputTextElement'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{3050F520-98B5-11CF-BB82-00AA00BDCE0B}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).

Je sais ce qu'il dit mais je ne sais pas quel objet je peux utiliser pour accéder à la Textbox.

Qu'est-ce que je fais mal?

Répondre

0

Vous utilisez le HTML Agility Pack pour analyser le code HTML complet (tel que reçu par le contrôle WebBrowser).

Vous pouvez l'interroger en utilisant la syntaxe XPath et il expose le code HTML de la même manière que l'API XmlDocument.

+0

Merci Oded je vais jeter un oeil à ce pack. Mais n'y a-t-il pas un moyen simple avec le code que j'essaie? – Gpx

+0

@ GPX - pas sûr. La seule chose que j'ai remarquée est que vous obtenez un _collection_ ('getElementsByName' renvoie une collection) et vous essayez de le forcer dans un seul élément. Essayez de sélectionner le premier résultat. – Oded

+0

Sur mshtml.HTMLElementCollection collection = (mshtml.HTMLElementCollection) document.getElementsByName ("tbName"); je reçois la même exception. – Gpx

0

savez-vous si vous en utilisant jquery je peux vous dire très facile

$('#tbBName').val('value here'); 
+0

Hey moustafa, je ne pas avoir accès au code page's et je ne pas envie d'écrire quelque chose dans jquery. C'est un outil pour remplir les texboxes de la page avec les valeurs d'un fichier Excel. Vous avez donc une idée C#? – Gpx

0

J'ai trouvé getElementsByName peu fiables lorsqu'ils sont utilisés directement sur le document (utiliser du C++)

Ainsi, en même temps que la question mentionnée par Oded sur le résultat étant une collection, vous pouvez essayer quelque chose comme la structure suivante. (Non testé/contour uniquement)

mshtml.HTMLDocument doc = (mshtml.HTMLDocument)webBrowser1.Document; 
mshtml.ElementCollection col = doc.getAll(); 
Dispatch disp = col.namedItem("tbBName"); 
// in C++ this can return either a collection or an item 
try{ // collection 
    mshtml.ElementCollection col2 = (mshtml.ElementCollection)disp; 
    for(index = 0; index < col2.length; ++index) { 
    mshtml.HTMLInputTextElement tbName = (mshtml.HTMLInputTextElement)col2[index]; 
    tbName.value = "Test"; 
} 
try{ // item 
    mshtml.HTMLInputTextElement tbName = (mshtml.HTMLInputTextElement)disp; 
    tbName.value = "Test"; 
} 
Questions connexes