禁用 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 步,具体取决于...)。
我的 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 步,具体取决于...)。