2016-03-20 23 views
2

我正在浏览网页在VB(IE引擎,我以后可能会用到GeckoFX),我已经使用我自定义的覆盖了deafult上下文菜单,其中包括“在新标签中打开”按钮。VB.Net - 网页浏览器,在新标签页中打开导航错误

当用户点击该按钮时,它会创建另一个TabPage与其他Web浏览器中,其导航到从以前的web浏览器的链接。

这里是我的代码:

Private Sub ToolStripMenuItem2_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem2.Click 
    Dim x1 As New TabPage 
    Dim B1 As New WebBrowser 
    TabControl1.TabPages.Add(x1) 
    TabControl1.SelectTab(x1) 
    B1.IsWebBrowserContextMenuEnabled = False 
    B1.ContextMenuStrip = Open 
    B1.Dock = DockStyle.Fill 
    TabControl1.SelectedTab.Controls.Add(B1) 
    Dim Elem As HtmlElement = WebBrowser1.Document.ActiveElement 
    Dim target As String = Elem.GetAttribute("href") 
    B1.Navigate(target) 
End Sub 

然而,由于这一行:

Dim Elem As HtmlElement = WebBrowser1.Document.ActiveElement 

如果用户从第一web浏览器中打开它的新WebBrowser组件将导航到正确的链接( WebBrowser1)。因此,如果用户在第二个Web浏览器上并打开一个新选项卡,则第三个Web浏览器将在第二个Web浏览器已存在的位置导航。那么,我该如何解决这个问题呢?

我该换什么WebBrowser1.Document.ActiveElement

在此先感谢

+0

请使用正确的文字框或否则这会让人非常讨厌阅读。 –

回答

0

你目前指的是每一次WebBrowser1。要引用当前的Web浏览器,您必须首先获取选定的选项卡,然后您可以在TabPage内获得WebBrowser

如果你只在你的标签页面中的WebBrowser控制,或者你知道控制总是有你可以做这样相同的索引:

Dim Elem As HtmlElement = DirectCast(TabControl1.SelectedTab.Controls(0), WebBrowser).Document.ActiveElement 

使用DirectCast你投了SelectedTab的第一控制到WebBrowser

SelectedTab.Controls是容器中所有控件的集合。第一个控件通过索引0访问(因此SelectedTab.Controls(0)中的0)。

+0

我得到一个错误:一个'System.NullReferenceException'类型的未处理的异常发生 –

+0

@AndrewGeo:对。把它放在你的'TabControl1.SelectTab(x1)'行之前,它应该工作。 –

+0

哦,上帝,谢谢你队友,它工作:) –

相关问题