Domanda

Sto avendo un problema con l'InternetExplorer in Shdocvw.dll. Ho anche referenziato Mshtml.tlb (mentre Googling, ho letto 1 commento 1 commento che ha detto che avrei dovuto fare riferimento a mshtml.dll, ma che questo non poteva essere fatto in Microsoft Visual Studio Express , I Don ' Sosco quanto è vero questo). Ecco una piccola funzione nella sua forma più semplice che non funzionerà per me:

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

Il problema è che quando creo l'istanza di IEOBJ, è considerato System.__ComObject di tipo invece di SHDocVw.InternetExplorer e tutti i sottoparti sono anche di tipo System.__ComObject. Quando provo una delle seguenti affermazioni ...

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

... Continua a ricevere lo stesso messaggio di errore:

.

Impossibile convertire implicitamente il sistema 'sistema .__ comobject' to 'system.windows.forms.htmlelement' (Ovviamente il tipo di convert-to è diverso per il IEObj.Document).

Sono nuovo a C # (proveniente da VBA, quindi ho familiarità con la programmazione), ma in VBA, l'equilivolo funziona perfettamente senza bisogno di convertirlo in alcun modo.

è qualcosa che sto sbagliando? Nel caso sia la mia creazione dell'oggetto, quanto segue è (approssimativamente) il codice che ho usato per testare la funzione:

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.

}
.

Tutto quello che voglio veramente è fermare su vari elementi in modo che posso inserire il testo in caselle di testo, fare clic su Pulsanti, ecc. Dovrei anche essere in grado di utilizzare anche le variabili del documento (come document.body. INNERNHTML , ecc.). L'intero progetto è di essere un gruppo di funzioni da contenere in una DLL da fare riferimento da altri progetti.

È stato utile?

Soluzione

Stai cercando di utilizzare la classe HtmlElement WinForms, che non è Un oggetto COM.
Non è possibile mescolare l'oggetto COM InternetExplorer nativo con le classi gestite in WinForms.

Dovresti utilizzare le classi WinForms (il controllo WebBrowser).

Nella maggior parte dei casi, non hai bisogno di com assolutamente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top