VB.Net - 网络浏览器,在新标签页导航错误中打开
VB.Net - Webbrowser, Open In New Tab Navigation Error
我正在使用 VB 中的网络浏览器(IE 引擎,我稍后可能会使用 GeckoFX)并且我已经使用我的自定义菜单覆盖了默认的上下文菜单,其中包括 "Open In New Tab" 按钮。
当用户单击该按钮时,它会创建另一个 TabPage
,其中包含另一个 Web 浏览器,该浏览器会从之前的 Web 浏览器导航到 link。
这是我的代码:
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
组件,它将导航到正确的 link。因此,如果用户在第二个网络浏览器上打开一个新选项卡,第三个网络浏览器将导航到第二个网络浏览器已经所在的位置。那么,我应该如何解决这个问题?
我应该用什么代替 WebBrowser1.Document.ActiveElement
??
提前致谢
您目前每次都指的是 WebBrowser1
。要引用当前的网络浏览器,您必须首先获取选定的选项卡,然后才能获取 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)。
我正在使用 VB 中的网络浏览器(IE 引擎,我稍后可能会使用 GeckoFX)并且我已经使用我的自定义菜单覆盖了默认的上下文菜单,其中包括 "Open In New Tab" 按钮。
当用户单击该按钮时,它会创建另一个 TabPage
,其中包含另一个 Web 浏览器,该浏览器会从之前的 Web 浏览器导航到 link。
这是我的代码:
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
组件,它将导航到正确的 link。因此,如果用户在第二个网络浏览器上打开一个新选项卡,第三个网络浏览器将导航到第二个网络浏览器已经所在的位置。那么,我应该如何解决这个问题?
我应该用什么代替 WebBrowser1.Document.ActiveElement
??
提前致谢
您目前每次都指的是 WebBrowser1
。要引用当前的网络浏览器,您必须首先获取选定的选项卡,然后才能获取 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)。