禁用TabControl中的单个TabPages?

时间:2016-11-15 20:46:57

标签: .net vb.net winforms 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页面 - 我不希望用户在点击特定内容时离开他们已经选中的标签按钮...

   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/

2 个答案:

答案 0 :(得分:1)

在@Hans Passant的帮助下,我这样做是为了解决这个问题......

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

        e.cancel=True

End Sub

在我的情况下,这完美地运作........

答案 1 :(得分:1)

他们在属性窗口中隐藏Enabled,但它确实有效。它不会禁用TabPage但作为容器控件,它会禁用所有子控件。然后“技巧”变成如何向用户传达这个或那个标签是可用的:为此,使用图像属性:

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

结果:

enter image description here

您可以修饰以明确说明,例如标签“第1步必须先完成”。您可以仍然干预以使用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取决于...)。