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结束子' 什么是NothingMe.TabControl1.SelectedTabMe.cbURLWBWB.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 如何以编程方式选择选项卡控件中的最后一个选项卡的主要内容,如果未能解决你的问题,请参考以下文章

vb.net 中 如何实现 播放mp3文件

如何以编程方式切换到 UITabBarController 中的另一个选项卡?

如何应用VB.NET MonthCalendar控件

如何以编程方式更改初始标签栏选择

VB.Net:动态创建的月历不会触发 Lost Focus 或 GotFocus

UITabbar 以编程方式选择选项卡并执行egue