Страница: 1 |
Страница: 1 |
Вопрос: Отследить нажатие HTML элемента VB 2010
Добавлено: 08.10.10 11:24
Автор вопроса: Vlad
Добрый день.
Помогите разобраться с кодом.
Задача: В контрл WebBrowser загружается HTML страница. На этой странице есть форма в которой расположена кнопка Id="enter" - отсылает запрос на сервер. Так вот нужно отследить момент нажатие мышкой или через клавиатуру на эту кнопку.
Я выполнил это - путем присвоения к HTML элементу события Click.
'декларация переменной
Public WithEvents elmHTML As HtmlElement
Private Sub WBrowser_Navigated(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserNavigatedEventArgs) Handles WBrowser.Navigated
'пров наличия загр документа
If (WBrowser.Document IsNot Nothing) Then
elmHTML = WBrowser.Document.GetElementById("enter")
If elmHTML IsNot Nothing Then
AddHandler elmHTML.Click, AddressOf elmHTML_Click
End If
End If
End Sub
Private Sub elmHTML_Click(ByVal sender As Object, ByVal e As HtmlElementEventArgs) 'Handles elmHTML.Click
MsgBox("Ура получилось.")
End Sub
При этом коде событие elmHTML_Click возникает 1 раз. Т.е. второе и дальнейшее нажатие на кнопку не вызывает событие elmHTML_Click.
Действия при проверке:
1 - Загрузилась страница
2 - Нажал на кнопку
3 - Сработало событие elmHTML_Click
4 - Выдало сообщение что форма не заполнена (работа скрипта сервера)
5 - Страница обновилась
и вот после этого событие перестает работать, при исследовании на этом моменте elmHTML=Nothing , т.е. как я понял элемента с таким Id не найдено. Хотя когда выполнился 5 пункт кнопка присутствует. Подозреваю что она может уже находиться не в самом контрле а в каком нибудь кеше. В общем тут очень большой штопор, прошу помощи знатоков. Мое решение не принципиально может кто нить подскажет другое.
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #1
Добавлено: 08.10.10 13:56
тут все просто, после обновления твой хендлер elmHTML.Click отваливается от обработчика.. его надо присваивать после каждого обновления страницы
Номер ответа: 2
Автор ответа:
Vlad
Вопросов: 6
Ответов: 22
Профиль | | #2
Добавлено: 08.10.10 18:03
Да, я это понимаю что нужно присваивать вроде так и задумывал установив AddHandler elmHTML.Click, AddressOf elmHTML_Click в событие Navigated, но как его присвоить если после обновления страници, когда проверяю elmHTML=Nothing т.е. данный элемент как я понимаю не найден
Номер ответа: 3
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #3
Добавлено: 08.10.10 18:17
Navigated - это не то событие где это надо делать.. попробуй в DocumentCompleted
Номер ответа: 4
Автор ответа:
Vlad
Вопросов: 6
Ответов: 22
Профиль | | #4
Добавлено: 08.10.10 19:13
Хорошо, попробую, но изначально не стал этого делать из-за того что это событие срабатывает только тогда когда документ загружен полностью, но тогда возникает вопрос, а что если пользователь нажмет кнопку до конца загрузки документа, ведь текст(а это и есть кнопка) грузиться быстрее чем какая нибудь картинка, так вот если пользователь нажмет на кнопку, а событие DocumentCompleted еще не наступило т.к. страница полностью не загрузилась тогда как быть. Вот из-за этих соображений и не стал работать с DocumentCompleted.
Номер ответа: 5
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #5
Добавлено: 08.10.10 19:17
НУ ты же сам видишь что в Navigated у тебя еще нету этой кнопки, потому что документ не загружен.. попробуй поискать более подходящее событие..
Номер ответа: 6
Автор ответа:
Vlad
Вопросов: 6
Ответов: 22
Профиль | | #6
Добавлено: 08.10.10 19:21
Вы не правильно наверное поняли. Кнопка есть на первый клик, а вот на второй и последующие по немонятным мне причинам она не находится.
Номер ответа: 7
Автор ответа:
Vlad
Вопросов: 6
Ответов: 22
Профиль | | #7
Добавлено: 08.10.10 20:59
EROS Вы правы в том что в событии DocumentCompleted событие elmHTML_Click срабатывает всегда и не теряется. Наверное в событии Navigated HTML Документ не успевает загрузиться (даже текст).
Наверное так оно и будет. Правда нужно уделить внимание на исключение если документ загружен не полностью и произошло нажатие. Все равно хочу сказать спасибо EROS за помощь.
Номер ответа: 8
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #8
Добавлено: 08.10.10 21:11
http://clip2net.com/clip/m25397/1286557807-clip-14kb.png
http://msdn.microsoft.com/ru-ru/library/system.windows.forms.webbrowser.navigated.aspx
Вам следует почитать документацию на предмет очередности событий компонента..