InternetExplorer настраивается как __ComObject вместо SHDocVw.InternetExplorer
-
14-11-2019 - |
Вопрос
У меня проблема с 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 вообще не нужен.