Vb.net 如何以编程方式选择选项卡控件中的最后一个选项卡
Posted
技术标签:
【中文标题】Vb.net 如何以编程方式选择选项卡控件中的最后一个选项卡【英文标题】:Vb.net How to programically select the last tab in a tabcontrol 【发布时间】:2014-11-30 11:16:09 【问题描述】:我正在制作一个带有 TabControl 的 Web 浏览器,我可以一切正常工作,但是当我单击“新建选项卡”按钮时,它会创建一个带有 Web 浏览器的新选项卡,但我必须手动选择该新选项卡以更改地址.我想要它,这样当我单击新标签时,它会自动将我重定向到新标签,而不是我所在的当前标签。我查看了“SelectedIndex”,但这似乎不是更改所选标签的最佳方式。
总结当我点击新标签时...
-
在选项卡控件的 END 处创建一个新选项卡,其 url 设置为 about:blank
不会将所选标签更改为“新创建的标签”
这是新标签按钮的代码
Private Sub btn_NewTab_Click(sender As Object, e As EventArgs) Handles btn_NewTab.Click
AddTab("about:blank", TabControl1)
End Sub
AddTab 子代码如下
Public Sub AddTab(ByRef URL As String, ByRef TabControl As TabControl)
Dim NewBrowser As New CustomBrowser
Dim NewTab As New TabPage
NewBrowser.Tag = NewTab
NewTab.Tag = NewBrowser
TabControl.TabPages.Add(NewTab)
NewTab.Controls.Add(NewBrowser)
NewBrowser.Dock = DockStyle.Fill
NewBrowser.Navigate(URL)
End Sub
如果您需要查看更多代码,那么他是 Web 浏览器背后所有代码的链接 Full Code
更新:我已经尝试添加
TabControl.SelectedIndex = TabControl.TabPages.Count - 1
到 AddTab 子,我得到一个突出显示的错误
Private Sub TabControl1_SelectedIndexChanged(sender As Object, e As EventArgs) 处理 TabControl1.SelectedIndexChanged 将 WB 调暗为 CustomBrowser = Me.TabControl1.SelectedTab.Tag Me.cbURL.Text = WB.Url.ToString
End Sub
【问题讨论】:
SelectedIndex
“似乎不是最好的方法”是什么意思?
SelectedIndex - 您必须为每个选项卡分配一个整数。因为我不知道用户创建了多少个标签,所以它似乎不是最好的答案(另外我不完全理解它)。总之,我想要添加选项卡按钮做的就是创建一个新选项卡并选择该选项卡。
不,请参阅下面的答案,我将展示您如何选择最后一个选项卡。不需要指定整数,SelectedIndex
以 0 开头,以 tabControl.TabPages.Count-1
结尾。
根据蒂姆的回答,您不必知道有多少个标签。 TabControl 对象为他们的孩子持有一个 .Count。
是的,但我要做的就是选择选项卡控件中的最后一个选项卡,即新创建的选项卡。
【参考方案1】:
我不知道TabControl.SelectedIndex=TabControl.TabPages.Count-1
有什么问题,但你也可以使用TabControl.SelectTab
:
Public Sub AddTab(ByRef URL As String, ByRef TabControl As TabControl)
Dim NewBrowser As New CustomBrowser
Dim NewTab As New TabPage
NewBrowser.Tag = NewTab
NewTab.Tag = NewBrowser
TabControl.TabPages.Add(NewTab)
NewTab.Controls.Add(NewBrowser)
NewBrowser.Dock = DockStyle.Fill
NewBrowser.Navigate(URL)
TabControl.SelectTab(NewTab)
End Sub
【讨论】:
抱歉,错误错误 - 我收到另一个错误,即 Neville Net.exe 中发生“System.NullReferenceException”类型的未处理异常附加信息:对象引用未设置为对象的实例。它还突出显示了我的一些代码,即'Private Sub TabControl1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles TabControl1.SelectedIndexChanged Dim WB As CustomBrowser = Me.TabControl1.SelectedTab.Tag Me.cbURL.Text = WB.Url.ToString结束子' 什么是Nothing
、Me.TabControl1.SelectedTab
或Me.cbURL
或WB
或WB.Url
?使用调试器。
抱歉,cbURL 是一个组合框,它是地址栏。 WB 是自定义 Web 浏览器,这意味着 WB 是一个 Web 浏览器,而 WB.Url 是 Web 浏览器的当前 url。为了更深入地理解代码,这里有一个指向源代码的链接Source Code
@NevilleSoftware:你还没有提到Nothing
到底是什么。
你所说的“什么都没有”是什么意思,你说的是我的代码中的额外间距,我有时会添加间距,因为我可能会在那里放置代码。【参考方案2】:
您可以使用TabControl.SelectTab
方法并将所选选项卡设置为您想要的任何选项卡。更多细节在这里:http://msdn.microsoft.com/en-us/library/system.windows.forms.tabcontrol.selectedtab(v=vs.110).aspx
【讨论】:
【参考方案3】: Dim i As Integer
i = yourForm.TabControl.TabPages.Count
yourForm.TabControl.SelectedIndex = i - 1
【讨论】:
【参考方案4】:我用
Private Sub Add_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Add.Click Dim t As New TabPage Dim newtab As New tab_layout newtab.Show() newtab.AxWebBrowser1.RegisterAsBrowser = True newtab.Visible = True newtab.TopLevel = False newtab.Dock = DockStyle.Fill t.Controls.Add(newtab) Browser.TabControl1.TabPages.Add(t) Browser.TabControl1.SelectedTab = t End Sub
和
Private Sub tab_layout_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load AxWebBrowser1.Navigate(My.Settings.Home) End Sub
针对你遇到的问题
也许这会对你有所帮助
【讨论】:
欢迎来到 SO。整理代码块中的格式会很有帮助。【参考方案5】:问题表明使用 SelectedIndex 不起作用,到目前为止,大多数答案都建议使用 SelectTab(nawtabpage) 按名称选择一个 TabPage,用于刚刚创建的 TabPage。但是,当您需要从任何地方选择一个已经存在的 TabPage 时,例如Form1(TabControl在Form1上),可以使用如下命令:
TabControl1.TabPages(0).Select()
其中(0)
是 TabControl1 中的 TabPage 0。如果 TabControl1 中有 4 个 TabPage,则它们的索引为 0、1、2、3,因此选择控件中的最后一个选项卡(如问题所问)只是主题的变体,即:
TabControl1.TabPages(3).Select()
【讨论】:
考虑编辑您的答案以包括对您的代码的解释以及它如何解决问题/问题?这将有助于未来的读者更好地了解正在发生的事情。如果有现有的和接受的答案,它有助于解释您的答案与其他答案有何不同或改进。以上是关于Vb.net 如何以编程方式选择选项卡控件中的最后一个选项卡的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式切换到 UITabBarController 中的另一个选项卡?