【问题标题】:VB.net disable a TabPage of a TabControlVB.net 禁用 TabControl 的 TabPage
【发布时间】:2013-10-03 06:24:27
【问题描述】:

我目前有一个使用 TabControl 的表单,其中有 5 个 TabPages。我想创建一个可以禁用特定TabPage 的按钮。

我试过了

TabPage1.Enabled = False

但它不起作用。我该怎么做?

【问题讨论】:

标签: vb.net winforms tabcontrol tabpage


【解决方案1】:

您需要使用 TabPages 集合。向您的表单添加一个按钮并尝试此操作

Private Sub Button1_Click( sender As Object,  e As EventArgs) Handles Button1.Click
        TabControl1.TabPages(0).Enabled =false
End Sub

它是一个基数为零的数组,所以在你的情况下它应该是从 0 到 4。

或者您可以从选项卡的文本中访问它

Private Sub Button2_Click( sender As Object,  e As EventArgs) Handles Button2.Click
    Dim tabPage As TabPage

    For Each tabPage In TabControl1.TabPages
        If tabPage.Text ="TabPage2"
            tabPage.Enabled =False
        End If
    Next
End Sub

【讨论】:

    【解决方案2】:

    目前,以下两个代码块执行相同的操作:禁用该 TabPage 上的所有控件(设置 Control.Enabled = False)。选项卡本身仍然可见并且可以从 TabControl 中选择,它不是隐藏的。该选项卡是可选择的,并且所有元素都显示为禁用。

    TabMyTab.Enabled = False
    

    MyTabControl.TabPages(4).Enabled = False 其中 TabPages(4) 是 TabControl 集合中的第 5 个。

    如果这是您的意图,您的初始代码应该可以工作。

    如果你想禁用类似于 button.Enabled = False 的选项卡,它不允许使用控件,你需要做一些不同的事情,因为在上面的代码中禁用 TabPage 会禁用该选项卡中的所有控件。如果这是您想要的,请继续阅读。许多程序员建议使用 TabControl 通过选择不同的或先前选择的选项卡来禁止选择选项卡。这是我所知道的最有效的方法。我将按如下方式实现:

    Private PreviousTab As New TabPage
    Private CurrentTab As New TabPage
    
    Private Sub TabControlName_Deselected(ByVal sender As Object, ByVal e As System.Windows.Forms.TabControlEventArgs) Handles TabControlName.Deselected
            PreviousTab = e.TabPage
    End Sub
    
    Private Sub TabControlName_Selected(ByVal sender As Object, ByVal e As System.Windows.Forms.TabControlEventArgs) Handles TabControlName.Selected
            CurrentTab = e.TabPage
            If (PreviousTab.Name <> CurrentTab.Name) And (CurrentTab.Name = UnselectableTab.Name) Then
                MessageBox.Show("Tab disabled.", "Selection Error", MessageBoxButtons.OK, MessageBoxIcon.Warning)
                TabControlName.SelectedTab = PreviousTab
            End If
    End Sub
    

    将您自己的值替换为您的项目的“UnselectableTab”和“TabControlName”。

    【讨论】:

    • 我认为这里有几个问题,尤其是“已启用”的歧义以及属性标记为“此成员对此控件没有意义”这一事实!我通常使用它来禁用选项卡上的所有控件,例如,如果许可证已过期。它可以直接工作 - myTab.Enabled = True|False - 或使用@j3osh6 所说的索引。
    【解决方案3】:

    您可以结合使用禁用选项卡,这样如果您在代码中更改启用或禁用哪些选项卡,则行为是动态的。

    Private Sub TabControl1_Deselected(sender As Object, e As TabControlEventArgs) Handles TabControl1.Deselected
        PreviousTab = e.TabPage
    End Sub
    

    .

    Private Sub TabControl1_Selected(sender As Object, e As TabControlEventArgs) Handles TabControl1.Selected
        If Not e.TabPage.Enabled Then
            TabControl1.SelectedTab = PreviousTab
        End If
    End Sub
    

    【讨论】:

      【解决方案4】:

      您可以通过设置标签的Enabled 属性来禁用标签:

      TabControl1.TabPages("tbPage1").Enabled = False

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-20
        • 1970-01-01
        • 2011-11-07
        相关资源
        最近更新 更多