Страница: 1 |
Вопрос: Отследить нажатие HTML элемента VB 2010 | Добавлено: 08.10.10 11:24 |
Автор вопроса: ![]() |
Добрый день.
Помогите разобраться с кодом. Задача: В контрл 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 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 58 Ответов: 4255 ![]() |
Профиль | Цитата | #1 | Добавлено: 08.10.10 13:56 |
тут все просто, после обновления твой хендлер elmHTML.Click отваливается от обработчика.. его надо присваивать после каждого обновления страницы |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() Вопросов: 6 Ответов: 22 |
Профиль | Цитата | #2 | Добавлено: 08.10.10 18:03 |
Да, я это понимаю что нужно присваивать вроде так и задумывал установив AddHandler elmHTML.Click, AddressOf elmHTML_Click в событие Navigated, но как его присвоить если после обновления страници, когда проверяю elmHTML=Nothing т.е. данный элемент как я понимаю не найден |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 58 Ответов: 4255 ![]() |
Профиль | Цитата | #3 | Добавлено: 08.10.10 18:17 |
Navigated - это не то событие где это надо делать.. попробуй в DocumentCompleted |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() Вопросов: 6 Ответов: 22 |
Профиль | Цитата | #4 | Добавлено: 08.10.10 19:13 |
Хорошо, попробую, но изначально не стал этого делать из-за того что это событие срабатывает только тогда когда документ загружен полностью, но тогда возникает вопрос, а что если пользователь нажмет кнопку до конца загрузки документа, ведь текст(а это и есть кнопка) грузиться быстрее чем какая нибудь картинка, так вот если пользователь нажмет на кнопку, а событие DocumentCompleted еще не наступило т.к. страница полностью не загрузилась тогда как быть. Вот из-за этих соображений и не стал работать с DocumentCompleted. |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 58 Ответов: 4255 ![]() |
Профиль | Цитата | #5 | Добавлено: 08.10.10 19:17 |
НУ ты же сам видишь что в Navigated у тебя еще нету этой кнопки, потому что документ не загружен.. попробуй поискать более подходящее событие.. |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() Вопросов: 6 Ответов: 22 |
Профиль | Цитата | #6 | Добавлено: 08.10.10 19:21 |
Вы не правильно наверное поняли. Кнопка есть на первый клик, а вот на второй и последующие по немонятным мне причинам она не находится. |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() Вопросов: 6 Ответов: 22 |
Профиль | Цитата | #7 | Добавлено: 08.10.10 20:59 |
EROS Вы правы в том что в событии DocumentCompleted событие elmHTML_Click срабатывает всегда и не теряется. Наверное в событии Navigated HTML Документ не успевает загрузиться (даже текст).
Наверное так оно и будет. Правда нужно уделить внимание на исключение если документ загружен не полностью и произошло нажатие. Все равно хочу сказать спасибо EROS за помощь. |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 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 Вам следует почитать документацию на предмет очередности событий компонента.. |
Страница: 1 |
|