InternetExplorer настраивается как __ComObject вместо SHDocVw.InternetExplorer

StackOverflow https://stackoverflow.com/questions/6019250

Вопрос

У меня проблема с InternetExplorer в SHDocVw.dll.У меня также есть ссылка на mshtml.tlb (во время поиска в Google я прочитал 1 комментарий, в котором говорилось, что мне следует ссылаться на mshtml.dll, но это невозможно сделать в Microsoft Visual Studio Экспресс, хотя я не знаю, насколько это правда).Вот одна небольшая функция в ее самой простой форме, которая у меня не работает:

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

Проблема в том, что когда я создаю экземпляр IEObj, он считается типом System.__ComObject вместо SHDocVw.InternetExplorer, и все подразделы также имеют тип System.__ComObject.Когда я пробую любое из следующих утверждений...

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

... Я продолжаю получать одно и то же сообщение об ошибке:

Не может неявно преобразовать тип «Система .__ Comobject» в System.windows.forms.htmlelement '(очевидно, что тип преобразования в IEObj.Document).

Я новичок в C# (пришел из VBA, поэтому знаком с программированием), но в VBA эквивалент работает отлично, без необходимости каким-либо образом его преобразовывать.

Я что-то делаю неправильно?Если это мое создание объекта, то ниже (примерно) код, который я использовал для тестирования функции:

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.

}

Все, что мне действительно нужно, это фиксировать различные элементы, чтобы я мог вводить текст в текстовые поля, нажимать кнопки и т. д.Мне также нужно будет иметь возможность использовать переменные документа (например, Document.Body.InnerHtml, и т. д).Весь проект должен представлять собой набор функций, которые будут содержаться в DLL, на которую будут ссылаться другие проекты.

Это было полезно?

Решение

Вы пытаетесь использовать WinForms HtmlElement класс, который не COM-объект.
Вы не можете смешивать родные InternetExplorer COM-объект с управляемыми классами в WinForms.

Вам следует использовать классы WinForms ( WebBrowser контроль) вместо этого.
В большинстве случаев COM вообще не нужен.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top