Frage

Ich habe ein Problem mit dem InternetExplorer in SHDocVw.dll.Ich habe auch auf mshtml.tlb verwiesen (beim Googeln habe ich einen Kommentar gelesen, der besagte, dass ich auf mshtml.dll verweisen sollte, dies aber nicht möglich sei Microsoft Visual Studio Express, ich weiß allerdings nicht, wie wahr das ist).Hier ist eine kleine Funktion in ihrer einfachsten Form, die für mich nicht funktioniert:

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

Das Problem ist, dass die IEObj-Instanz beim Erstellen als Typ betrachtet wird System.__ComObject anstatt SHDocVw.InternetExplorer, und alle Unterteile sind ebenfalls vom Typ System.__ComObject.Wenn ich eine der folgenden Aussagen versuche...

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

...Ich erhalte immer die gleiche Fehlermeldung:

Type 'System .__ comObject' in 'System.Windows.Forms.htmlelement' nicht implizit konvertieren (offensichtlich ist der Konvertit-zu-Typ für die "system.windows.Forms.htmlelement" nicht konvertiert. IEObj.Document).

Ich bin neu in C# (ich komme von VBA und bin daher mit der Programmierung vertraut), aber in VBA funktioniert das Äquivalent perfekt, ohne dass es in irgendeiner Weise konvertiert werden muss.

Ist es etwas, was ich falsch mache?Falls es sich um meine Erstellung des Objekts handelt, ist (ungefähr) der folgende Code, den ich zum Testen der Funktion verwendet habe:

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.

}

Eigentlich möchte ich mich nur an verschiedene Elemente klammern, damit ich Text in Textfelder eingeben, auf Schaltflächen klicken usw. kann.Ich müsste auch in der Lage sein, die Dokumentvariablen zu verwenden (wie Document.Body.InnerHtml, usw).Das gesamte Projekt soll aus einer Reihe von Funktionen bestehen, die in einer DLL enthalten sind und von anderen Projekten referenziert werden können.

War es hilfreich?

Lösung

Sie versuchen, WinForms zu verwenden HtmlElement Klasse, die ist nicht ein COM-Objekt.
Sie können das Native nicht mischen InternetExplorer COM-Objekt mit den verwalteten Klassen in WinForms.

Sie sollten die WinForms-Klassen verwenden (die WebBrowser Steuerung) statt.
In den meisten Fällen benötigen Sie COM überhaupt nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top