禁用 TabControl 中的单个 TabPages?

Disable individual TabPages in a TabControl?

我的 vb.net 应用程序中有一个 tabControl - 它有 3 个选项卡。单击第一个选项卡后,我正在尝试做一些事情,以便用户无法离开该选项卡 - 这似乎比我预期的要困难得多。我只是想禁用 TAB 本身 - 这样他们就无法离开当前选项卡 - TABPAGE 不必禁用,因为他们不应该能够离开当前选项卡...

我正在尝试一些东西....

tabControl1.tabPage(1).enabled=false

tabcontrol1.tabpage1.enabled=false

甚至试图隐藏它

tabcontrol1.tabpage(1).visible=false

似乎没有任何效果.........!

我什至试过了

tabPage1.hide()

但什么都不做

编辑:

我找到了这段代码 - 我是否必须对此做些什么才能禁用实际的 TAB - 不是 TAB PAGE - 我不希望用户在单击特定按钮时离开他们所在的选项卡。 ..

   Private Sub TabControl1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles TabControl1.DrawItem

    Dim g As Graphics
    Dim sText As String
    Dim iX As Integer
    Dim iY As Integer
    Dim sizeText As SizeF
    Dim ctlTab As TabControl
    ctlTab = CType(sender, TabControl)
    g = e.Graphics

    sText = ctlTab.TabPages(e.Index).Text

    sizeText = g.MeasureString(sText, ctlTab.Font)

    iX = e.Bounds.Left + 6

    iY = e.Bounds.Top + (e.Bounds.Height - sizeText.Height) / 2

    g.DrawString(sText, ctlTab.Font, Brushes.Black, iX, iY)

End Sub

在这里找到这个...http://www.dreamincode.net/forums/topic/125792-how-to-make-vertical-tabs/

在@Hans Passant 的帮助下我解决了这个问题....

Private Sub TabControl1_Selecting(sender As Object, e As TabControlCancelEventArgs) Handles TabControl1.Selecting

        e.cancel=True

End Sub

在我的例子中,这非常有效........

他们将 Enabled 隐藏在 属性 window 中,但它确实部分起作用。它不会禁用 TabPage 但作为容器控件,它会禁用所有子控件。 "trick" 然后变成如何向用户传达这个或那个选项卡可用:为此,使用图像属性:

TabControl1.TabPages(1).Enabled = False
TabControl1.TabPages(1).ImageIndex = 1

结果:

您可以修饰以使其清晰,例如带有 "Step 1 must be completed first" 的标签。您可以 仍然 进行干预以停止使用 SelectedIndexChanged 事件更改选项卡,但由于它们无法与任何控件交互,因此没有真正的需要。

您还可以将图像部分与 SelectedIndexChanged 事件陷阱一起使用,以此告诉他们它不可用。


还有另一种方法,但其他方法更简单。对于具有 "Next >>" 类型按钮

的向导场景,这可以正常工作
  • 创建(TabPage 的)列表
  • 在其中存储第 1-N 页
  • 从 TabControl 中删除第 1-N 页(保留 TabPage(0))
  • 当他们点击“下一步”时,将下一页添加回控件

示例:

Select Case TabControl1.TabPages.Count
    Case 1
        TabControl1.TabPages.Add(Pgs(0))
    Case 2
        TabControl1.TabPages.Add(Pgs(1))
    ...
End Select

如果有一个 "New Foo" 按钮来引导完成新 Foo 的步骤,只需再次删除第 1-N 页。我不喜欢在可见性方面来来去去的控件,但是当 Step Two 可以根据步骤 1 中的值(即 TabPage 2、3 中的任何一个而变化时,它会很有用4 可用于第 2 步,具体取决于...)。