我在WebBrowser控件的当前文档中有一个TABLE
元素。当我按下光标[A
Key
Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
htmlDocument1 = WebBrowser1.Document
AddHandler htmlDocument1.MouseOver, AddressOf Me.gettd
End Sub
Public Sub gettd(ByVal sender As Object, ByVal e As System.Windows.Forms.HtmlElementEventArgs)
Dim theElementCollection As HtmlElementCollection
theElementCollection = WebBrowser1.Document.GetElementsByTagName("td")
For Each curElement As HtmlElement In theElementCollection
e.ToElement.Style = "background-color: orange;"
Next
End Sub
设置KeyPreview = True
:
Public Sub Form1_KeyDown(ByVal sender As System.Object, ByVal e As KeyEventArgs) Handles Me.KeyDown
If e.KeyCode = Keys.A Then
...
end if
End Sub
我还能如何实现这一目标?
需要一些更改:
DocumentCompleted
事件可用于向其他事件添加处理程序,但您必须记住,此事件被多次引发每个URI导航:您正在向[ C0]事件。在这种情况下,当URI为MouseOver
时添加一个处理程序,而当我们将Navigated移至另一个时,将其删除更为简单。另外,请在此处阅读注释:Navigating
代替解析文档中所有元素的集合,我们可以简单地使用How to get an HtmlElement value inside Frames/IFrames?方法,将Document.GetElementFromPoint()或e.ClientMousePosition事件提供的MouseOver
值作为当前Point位置传递。
当其他控件捕获输入时,即使MouseMove
设置为KeyPreview,也不能使用Form的KeyDown事件来捕获按下的键。您可以覆盖该窗体的True
,因为它是在对消息进行预处理时调用的。
总是在访问ProcessCmdKey或其属性之前检查null
。例如,从未初始化的字符串属性是HtmlElement(null
),而不是Nothing
。
[将此代码添加到表单,然后导航到HTML页面:
String.Empty
我添加了一个切换功能,可以在按下webBrowser1.Navigate("[Some URI]")
时将当前单元格的样式设置为background-color
值,并在再次按下时将其设置回。在此,将其硬编码为Keys.A
,但是如果需要,您可以添加一些逻辑以保存以前的样式。
white
这是它的工作方式:
Public Class FormBrowser
Private trackedElement As HtmlElement = Nothing
Private elementColorOrange As String = "background-color: orange;"
Private elementColorWhite As String = "background-color: white;"
Private Sub webBrowser1_Navigating(sender As Object, e As WebBrowserNavigatingEventArgs) Handles webBrowser1.Navigating
If webBrowser1.Document Is Nothing Then Return
RemoveHandler webBrowser1.Document.MouseOver, Nothing
End Sub
Private Sub webBrowser1_Navigated(sender As Object, e As WebBrowserNavigatedEventArgs) Handles webBrowser1.Navigated
AddHandler webBrowser1.Document.MouseOver,
Sub(o, ev)
Dim doc = webBrowser1.Document
If doc Is Nothing Then Return
trackedElement = doc.GetElementFromPoint(ev.ClientMousePosition)
End Sub
End Sub
Protected Overrides Function ProcessCmdKey(ByRef msg As Message, keyData As Keys) As Boolean
If keyData = Keys.A Then
If trackedElement IsNot Nothing AndAlso trackedElement.TagName = "TD" Then
Dim currentStyle As String = trackedElement.Style & ""
trackedElement.Style = If(currentStyle.Contains(elementColorOrange), elementColorWhite, elementColorOrange)
Return True
End If
End If
Return MyBase.ProcessCmdKey(msg, keyData)
End Function
End Class