Question

J'ai un problème avec InternetExplorer dans shdocvw.dll. J'ai également référencé Mshtml.tlb (pendant que vous avez sur Google, j'ai lu 1 commentaire qui disait que je devrais faire référence à mshtml.dll, mais que cela ne pouvait pas être fait dans Microsoft Visual Studio Express, Je ne sais pas à quel point cela est vrai). Voici une petite fonction dans sa forme la plus élémentaire qui ne fonctionnera pas pour moi:

public static HtmlElement GetDocumentControlByID(
    ref SHDocVw.InternetExplorer IEObj, 
    string ControlID)
{
    HtmlElement ReturnElement = IEObj.Document.GetElementById(ControlID);
    return ReturnElement;
}

Le problème est que lorsque je crée l'instance IEOBJ, c'est considéré comme le type System.__ComObject à la place de SHDocVw.InternetExplorer, et toutes les sous-parties sont également de type System.__ComObject. Quand j'essaye l'une des déclarations suivantes ...

Document WebDoc = IEObj.Document;
HtmlElement ReturnElement = IEObj.Document.GetElementById(ControlID);

... Je continue de recevoir le même message d'erreur:

Implicitement convertir le type de type 'System .__ ComObject' en 'System.windows.forms.htmlelement' (évidemment, le type converti est différent pour le IEObj.Document).

Je suis nouveau dans C # (venant de VBA, donc je connais la programmation), mais dans VBA, l'équivelant fonctionne parfaitement sans avoir besoin de le convertir de quelque manière que ce soit.

Est-ce quelque chose que je fais mal? Dans le cas où c'est ma création de l'objet, ce qui suit est (à peu près) le code que j'ai utilisé pour tester la fonction:

public static void Main(String [] args)
{
    SHDocVw.InternetExplorer IEObj = new SHDocVw.InternetExplorer();
    IEObj.Navigate("http://sports.ladbrokes.com/");
    while (IEObj.ReadyState != 4)
    {

    }

    // There is a textbox that definitely exists

    HtmlElement NetControl = GetDocumentControlByID(ref IEObj, "username");

    // I was goint to manipulate it after this, but it crashes in the above function.

}

Tout ce que je veux vraiment faire, c'est s'accrocher à divers éléments afin que je puisse entrer du texte dans des zones de texte, cliquer sur les boutons, etc. Je devrais également être en mesure d'utiliser les variables de document (comme Document.body.innerhtml, etc). L'ensemble du projet doit être un tas de fonctions à contenir dans une DLL à référencer par d'autres projets.

Était-ce utile?

La solution

Vous essayez d'utiliser les winforms HtmlElement classe, qui not un objet com.
Vous ne pouvez pas mélanger le natif InternetExplorer COM Objet avec les classes gérées dans WinForms.

Vous devez utiliser les classes WinForms (le WebBrowser contrôle) à la place.
Dans la plupart des cas, vous n'avez pas du tout besoin de com.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top