Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 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

Вам следует почитать документацию на предмет очередности событий компонента..

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам