В качестве быстрого исправления я использовал событие MouseUp расширенного элемента управления WebBrowser для получения позиции курсора. Я использовал это, чтобы получить элемент в текущем выбранном / выделенном тексте в элементе управления WebBrowser.
Dim ScreenCoord As New Point(MousePosition.X, MousePosition.Y)
Dim BrowserCoord As Point = webBrowser1.PointToClient(ScreenCoord)
Dim elem As HtmlElement = webbrowser1.Document.GetElementFromPoint(BrowserCoord)
Я использовал вспомогательную функцию, чтобы получить индекс элемента в позиции курсора.
Function getIndexforElement(elem As htmlElement, browser As webbrowser) As Integer
Dim page as mshtml.HTMLdocument
Dim Elements as mshtml.IHTMLElementCollection
Dim elemCount As Integer = 0
page = browser.document.Domdocument
elements = page.getElementsByTagName(elem.TagName)
For Each element As mshtml.IHTMLElement In elements
elemCount = elemCount + 1
If (elem.OffsetRectangle.Top = element.offsetTop) And (elem.OffsetRectangle.Left = element.offsetLeft) Then
Exit For
End If
Next
If elemCount > 0 Then
Dim matches as MatchCollection = regex.Matches(browser.DocumentText,"<" & elem.TagName,regexoptions.IgnoreCase Or regexoptions.Multiline)
Return matches(elemCount-1).Index + 1
Else
Return 0
End If
End Function
Имея индекс элемента, можно использовать простое регулярное выражение для поиска номера строки в исходном html-файле.
Function getLineNumber(textIn As String, index As Integer) As Integer
textIn = textIn.Replace(VbCrLf,VbLf)
Dim line as Integer = regex.Matches(textIn.Substring(0,index),"\n",RegexOptions.Multiline).Count + 1
If line < 1 Then line = 1
Return line
End Function