BobSki
BobSki

Reputation: 1552

Disable individual TabPages in a TabControl?

I have a tabControl in my vb.net application - that has 3 tabs. Upon a click on the first tab I'm trying to do something so that user will not be able to get out of that tab - which seems to be a lot more difficult that I anticipated. I'm simply trying to disable the TAB itself - so that they are unable to leave the current tab - the TABPAGE does not have to be disabled since they are not supposed to be able to get out of the current one...

i'm trying something along the way of....

tabControl1.tabPage(1).enabled=false

and

tabcontrol1.tabpage1.enabled=false

and even trying to hide it

tabcontrol1.tabpage(1).visible=false

And nothing seems to work.........!

i've even tried

tabPage1.hide()

But doesn't do anything

EDIT:

I found this code - will I have to do something with this in order to disable the actual TAB - Not TAB PAGE - I don't want user leaving the tab they've on when they click a specific button...

   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

Found this here...http://www.dreamincode.net/forums/topic/125792-how-to-make-vertical-tabs/

Upvotes: 1

Views: 2371

Answers (2)

They hide Enabled in the property window, but it does partially work. It wont disable the TabPage but as a container control, it does disable all the child controls. The "trick" then becomes how to convey to the user that this or that tab is available: for that, use the image properties:

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

Result:

enter image description here

You can embellish to make it clear, for instance a label with "Step 1 must be completed first". You can still intervene to stop the tab change with the SelectedIndexChanged event but since they cannot interact with any control, there is no real need.

You can also use the Image part with the SelectedIndexChanged event trap, as a means to tell them it is not available.


There is yet another way but the other alteratives are simpler. This can work ok for a Wizard scenario with a "Next >>" type button

  • Create a List(of TabPage)
  • Store pages 1-N in it
  • Remove Pages 1-N from the TabControl (leaving TabPage(0))
  • When they hit 'Next`, add the next page back to the control

Example:

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

If there is a "New Foo" button to wizard thru the steps for a new Foo, just remove pages 1-N again. I am not fond of controls coming and going visibility wise, but it can useful when Step Two can vary depending on a value in Step 1 (ie either of TabPage 2, 3 or 4 can be used for Step 2 depending...).

Upvotes: 1

BobSki
BobSki

Reputation: 1552

With the help of @Hans Passant I did this to resolve this problem....

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

        e.cancel=True

End Sub

In my case this works perfectly........

Upvotes: 2

Related Questions