Выделение элемента при наведении мышкой в WebBrowser
Из этой статьи вы узнаете, как выделить элемент в WebBrowser при наведении мышкой.
Как обычно начнём с создания нового проекта типа Windows Forms Application. Затем добавим на форму элемент управления WebBrowser (wb).
Для работы нам так же понадобиться тестовая страница, её исходник я возьму из предыдущей статьи: Получение имени элемента при наведении мышкой.
И так для начала нужно загрузить страницу в WebBrowser. В данном примере это действие я буду выполнять в обработчике события Form.Load
private void Form1_Load(object sender, EventArgs e) { wb.Navigate("адрес сайта"); }
Затем необходимо дождаться полной загрузки страницы, для этого подписываемся на событие DocumentCompleted.
private void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { }
Следующим шагом будет подписка на событие MouseOver, которое позволит отловить момент наведения мышки на элемент.
private voidwb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { wb.Document.MouseOver += new HtmlElementEventHandler(Document_MouseOver); } void Document_MouseOver(object sender, HtmlElementEventArgs e) { throw new NotImplementedException(); }
Выделение элемента
Выделить элемент на странице можно несколькими способами, так например, в данной статье рассмотрим, как это можно сделать с помощью css стилей.
1. Чтобы применить css стиль к элементу нужно воспользоваться свойством Style. Например, я хочу, чтобы при наведении мышки на элемент вокруг него создавалась рамка красного цвета:
e.ToElement.Style = "border:2px solid red;";
результат
2. Применение стиля будет происходить в обработчике события MouseOver.
void Document_MouseOver(object sender, HtmlElementEventArgs e) { if (e.ToElement != null & e.ToElement.Style == null) { e.ToElement.Style = "border: 2px solid red;"; } }
Проверим, как работает данная часть кода. Запускаем приложение и начинаем наводить мышку на любые элементы на странице.
В принципе всё работает, но хотелось бы сделать так, чтобы при переключении с одного элемента на другой, выделение (рамка) исчезало.
3. В обработчике события DocumentCompleted подписываемся на событие MouseLeave.
private void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { wb.Document.MouseOver += new HtmlElementEventHandler(Document_MouseOver); //добавить wb.Document.MouseLeave += new HtmlElementEventHandler(Document_MouseLeave); }
4. Присвоим свойству Style значение null и вместо ToElement укажем свойство FromElement.
void Document_MouseLeave(object sender, HtmlElementEventArgs e) { e.FromElement.Style = null; }
Снова запускаем приложение, теперь всё работает как надо. Если вам было, что-то не понятно, то посмотрите видео.
Читайте также: