Это может быть слишком поздно, но вот это в любом случае, если вы все еще задаетесь вопросом:
1 - HtmlElement div_result = webBrowser1.Document.GetElementById("div_result"); Строка № 1 выполняется, когда веб-страница загружается и событие DocumentCompleted вызывается браузером. Внутри обработчика событий вы сначала получаете указатель на элемент DOM «div_result» и назначаете переменную типа HtmlElement с именем div_result.
2 - div_result.AttachEventHandler("onpropertychange", новый EventHandler(resultEventHandler)); Строка №2 — регистрирует событие onpropertychange и назначает метод resultEventHandler в качестве метода слушателя.
Каждый раз, когда вы нажимаете кнопку на своей веб-странице, кнопка (как я предполагаю) находится в форме, которая отправляется, что вызывает загрузку веб-страницы; кстати, вы не указали, какой метод публикации вы используете при нажатии кнопки (получить или опубликовать). Когда загрузка веб-страницы завершается и дерево элементов DOM построено, вызывается событие DocumentCompleted. Вы метод обработчика события DocumentCompleted выполнил инструкции, описанные выше.
Каждый раз, когда вы нажимаете кнопку, ваша веб-страница перезагружается, и вы переназначаете прослушиватель событий для события onpropertychange. Вы только назначаете прослушиватель событий. Событие никогда не будет вызвано. Он будет просто определяться каждый раз, когда вы нажимаете кнопку. У вас есть классическая проблема, что было раньше: курица или яйцо. Но в вашем случае ваш цыпленок - это событие нажатия кнопки, вызывающее запуск метода DocumentCompleted, который сбрасывает состояние всех переменных в методе, и вашему яйцу требуется указатель на событие onpropertychange элемента DIV до того, как кнопка будет нажата в Интернете страница . Как вы назначаете прослушиватель событий для htmlelement, прежде чем вы сможете получить указатель из DOM, который не был создан? Поместите переменную логического флага в класс, содержащий метод DocumentCompleted, и установите его начальное состояние. Переместите переменную div_result за пределы метода DocumentCompleted, чтобы увеличить ее область действия и сохранить ее состояние в случае нажатия кнопки. Таким образом, вы получите указатель на свой элемент div и установите его прослушиватель событий onpropertychange при первой загрузке веб-страницы. Добавьте тест, если вы просто хотите установить указатель на прослушиватель событий onpropertychange элемента DIV только один раз (я поместил его в приведенный ниже пример кода), и при следующем нажатии кнопки ваше событие сработает. ПРИМЕЧАНИЕ! Убедитесь, что вы не добавляете и не удаляете какой-либо элемент на своей веб-странице после сохранения указателя на любой из элементов веб-страницы или их событий. В противном случае вам придется повторно анализировать DOM, чтобы получить указатель на новую позицию элемента в дереве DOM.
//Увидеть ниже:
class SomeClass
{
bool DocumentHasLoaded = false;
HtmlElement div_result = null;
//Constructor and other methods go here....
//Then change your DocumentCompleted method to look like this:
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (DocumentHasLoaded == false) // I prefer using a ! before the variable instead
{
DocumentHasLoaded = true; // You will have to create your own appropriately timed mechanism to reset this variable's state should you want to execute the whole process again.
div_result = webBrowser1.Document.GetElementById("div_result");
div_result.AttachEventHandler("onpropertychange", new EventHandler(resultEventHandler));
}
}
}
Чтобы ответить на ваш второй вопрос, мне нужна дополнительная информация о данных, загружаемых в DIV; например откуда он взялся и какого он типа, а также любую другую относящуюся к делу информацию, о которой вы можете подумать.
person
Jamie
schedule
30.09.2014