将信息传递回父WebBrowser控件

时间:2014-04-22 12:33:23

标签: .net vb.net visual-studio-2010 webbrowser-control

Visual Studio 2010,Visual Basic .NET


再次编辑 我已经确定我要做的事情是无法完成的。


我的表单frmContent带有WebBrowser控件wbContent。 如果单击wbContent中的图像链接,它将打开一个新表单(frmImages)并将图像加载到WebBrowser wbImages中。我使用WebBrowser控件,因为我使用相同的窗口打开用html编写的表。

无论如何,当用户点击wbContent中的表格链接时,它会打开frmImages并将表格的html页面加载到wbImages

我在wbImages中添加了一个鼠标按下事件监听器,就像我在wbContent中一样。当用户单击wbImages内的表中的链接时,可以打开其父表单frmContent中的链接。

我已尝试wbImages.Stop()阻止wbImages导航,但这不起作用。

我尝试将焦点设置为frmContent,然后将URL加载到父WebBrowser,wbContent中,这不起作用。然后我唯一可以做的就是在将URL发送到父窗口之前添加MessageBox。

下面的代码有效,但是如果我删除了MessageBox,它会在wbImages中加载URL。

Public Sub wpMouseDown(ByVal sender As Object, ByVal e As HtmlElementEventArgs)
    If e.MouseButtonsPressed = Windows.Forms.MouseButtons.Left Then
        Dim bookmarkElement = wbImages.Document.GetElementFromPoint(e.ClientMousePosition)
        If bookmarkElement.GetAttribute("href").ToString() <> "" Then
            testUrl = bookmarkElement.GetAttribute("href").ToString()
            MessageBox.Show(testUrl)
            frmContent.Focus()
            frmContent.wbContent.Navigate(New Uri(testUrl))
        End If
    End If
End Sub

修改

如果我删除了frmContent.wbContent.Navigate(New Uri(testUrl)),wbImages仍会导航。我必须错误地实现了ReturnValue,或者我的事件处理程序错误,而.Stop()也不起作用。在我从这里的建议做出任何更改之前,这是整个事件处理程序代码。

Private Sub frmImages_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    AddHandler wbImages.Document.MouseDown, AddressOf wpMouseDownEvent
End Sub

Private Sub wpMouseDownEvent(ByVal sender As Object, ByVal e As System.Windows.Forms.HtmlElementEventArgs)
    Dim event_html As New HtmlElementEventHandler(AddressOf wpMouseDown)
    event_html.Invoke(sender, e)
End Sub

Public Sub wpMouseDown(ByVal sender As Object, ByVal e As HtmlElementEventArgs)
  If e.MouseButtonsPressed = Windows.Forms.MouseButtons.Left Then
     Dim bookmarkElement = wbImages.Document.GetElementFromPoint(e.ClientMousePosition)
     If bookmarkElement.GetAttribute("href").ToString() <> "" Then
        testUrl = bookmarkElement.GetAttribute("href").ToString()
        'Need testUrl to be passed to the Navigation for wbContent
      End If
   End If
End Sub

1 个答案:

答案 0 :(得分:2)

您需要将事件的ReturnValue设置为False以阻止默认操作,就像您从Javascript中的false处理程序返回onclick以防止默认操作。


事件处理程序可能在不同的线程上运行,或者事件序列在以这种方式使用时根本不起作用。我怀疑MessageBox使它工作,因为它运行一个事件循环,处理一些需要在另一个导航可能发生之前处理的消息。通过使用BeginInvoke延迟导航,可以解决这两种情况中的任何一种情况。我不是VB.NET程序员,但我想是这样的事情:

frmContent.BeginInvoke(Function ()
                           frmContent.Activate()
                           frmContent.wbContent.Navigate(New Uri(testUrl))
                       End Function)