VB.Net-Webbrowser,在新选项卡中打开导航错误

VB.Net-Webbrowser,在新选项卡中打开导航错误,.net,vb.net,winforms,webbrowser-control,tabcontrol,.net,Vb.net,Winforms,Webbrowser Control,Tabcontrol,我正在用VB开发一个web浏览器(IE引擎,我以后可能会使用GeckoFX),我已经用我的自定义菜单覆盖了deafult上下文菜单,其中包括一个“在新选项卡中打开”按钮 当用户单击该按钮时,它将创建另一个选项卡页面,其中包含另一个web浏览器,可从上一个web浏览器导航到链接 这是我的密码: Private Sub ToolStripMenuItem2_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem2.Click

我正在用VB开发一个web浏览器(IE引擎,我以后可能会使用GeckoFX),我已经用我的自定义菜单覆盖了deafult上下文菜单,其中包括一个“在新选项卡中打开”按钮

当用户单击该按钮时,它将创建另一个
选项卡页面
,其中包含另一个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浏览器(
WebBrowser1
)打开新的
WebBrowser
组件,则该组件将导航到正确的链接。因此,如果用户在第二个web浏览器上并打开一个新选项卡,则第三个web浏览器将导航到第二个web浏览器已经存在的位置。那么,我应该如何解决这个问题

我应该用什么替换
WebBrowser1.Document.ActiveElement


提前感谢

您现在每次都在引用
WebBrowser1
。要引用当前的web浏览器,您必须首先获取所选的选项卡,然后才能在该
选项卡页面中获取
web浏览器

如果选项卡页面中只有
WebBrowser
控件,或者您知道该控件始终具有相同的索引,则可以执行以下操作:

Dim Elem As HtmlElement = DirectCast(TabControl1.SelectedTab.Controls(0), WebBrowser).Document.ActiveElement
使用
DirectCast
可以将
SelectedTab
的第一个控件强制转换为
WebBrowser


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

请使用正确的大小写,否则读起来会很烦人。我收到一个错误消息:类型为“System.NullReferenceException”的未处理异常occurred@AndrewGeo:对。将它放在您的
选项卡控件1之前。选择tab(x1)
行,它应该可以工作。@AndrewGeo:不客气!我在web浏览器类别中做了很多事情(添加选项卡是第一个),因此我看到了与我以前所做的有很多相似之处。:)在阅读您的评论时,我认为您在不久的将来可能会回答一些问题。然后我打开我的项目,却发现我想不出一种方法来获取新web浏览器控件的导航页面(用于更新历史记录、更改tab.text等)。那么,你能引导我完成这一个吗?我应该开始一个新的话题吗?另外,说我们的代码之间有相似之处实际上是一种恭维,因为我16岁,我用VB.Net编程只有一年左右:)@AndrewGeo:我17岁,我用VB编程已经8年了,VB.Net编程已经7年了:)。为了帮助您处理您的请求,您可以通过电子邮件继续如果您进入我的堆栈溢出配置文件和我的网站(注意背景声音),然后进入支持部分,您可以在那里找到我的支持电子邮件。