Hier wie man die Reiter eines TabControls verstecken kann, weil manche finden die häßlich.
Damit kann man Funktionsbereiche einer Anwendung auf verschiedene Tabs unterbringen, und etwa über ein menü oder über eine Combo-/List-Box steuern, welcher Funktionsbereich grade aktiv sein soll.
Ich hab gleich alle 3 genannten Steuerungs-möglichkeiten implementiert, wie man sieht, macht die Steuerung per Menü etwas mehr Aufwand, da man kein Databinding anwenden kann.
Erläuterung
Für List- und Combo-Box wird im Load jeweils DataSource und DisplayMember festgelegt, und im listControl_SelectedIndexChanged wird ihr SelectedIndex aufs TabControl übertragen.
Die MenüItem müssen erst codeseitig erzeugt, und per AddHandler ans MenuItem_Click angeschlossen werden.
In MenuItem_Click muß der Index für den gewünschten TabIndex erst ermittelt werden, und auch die Checked-Property aller Items korrekt gesetz wern - naja - auch kein Act.
Man muß sich halt für eine Steuerung entscheiden, weil so, wies hier gemacht ist, erfolgt keine Synchronisation der Listbox, wenn per Menü die Tab gewechselt wurde. Und umgekehrt auch nicht.
Weitere Ideen, ein TabControl zu pimpen, finden sich auf erweitertes TabControl
Damit kann man Funktionsbereiche einer Anwendung auf verschiedene Tabs unterbringen, und etwa über ein menü oder über eine Combo-/List-Box steuern, welcher Funktionsbereich grade aktiv sein soll.
Ich hab gleich alle 3 genannten Steuerungs-möglichkeiten implementiert, wie man sieht, macht die Steuerung per Menü etwas mehr Aufwand, da man kein Databinding anwenden kann.
VB.NET-Quellcode
- Public Class frmOhneReiter
- Private Sub frmOhneReiter_Load(ByVal sender As Object, ByVal e As EventArgs) _
- Handles Me.Load
- tabControl1.SuspendLayout()
- 'um Reiter zu verbergen benötigt man die 3 folgenden Einstellungen
- 'ich empfehle das codeseitig zu machen, weil im Designer hat man sonst
- ' Probleme, die TabPages zum designen auszuwählen
- tabControl1.SizeMode = TabSizeMode.Fixed
- tabControl1.ItemSize = New Size(0, 1)
- tabControl1.Appearance = TabAppearance.Buttons
- tabControl1.ResumeLayout()
- 'list-/Combo-Box konfigurieren
- Dim pages = tabControl1.TabPages
- Me.listBox1.DisplayMember = "Text"
- Me.ComboBox1.DisplayMember = "Text"
- listBox1.DataSource = pages
- ComboBox1.DataSource = pages
- 'MenuItems erzeugen und konfigurieren
- Dim tabMenuItems = TabPageToolStripMenuItem.DropDownItems
- For Each tp As TabPage In pages
- Dim itm = DirectCast(tabMenuItems.Add(tp.Text), ToolStripMenuItem)
- AddHandler itm.Click, AddressOf MenuItem_Click
- Next
- DirectCast(tabMenuItems(0), ToolStripMenuItem).Checked = True
- End Sub
- Private Sub listControl_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) _
- Handles listBox1.SelectedIndexChanged, ComboBox1.SelectedIndexChanged
- tabControl1.SelectedIndex = listBox1.SelectedIndex
- 'TabControl ist bisserl doof - es nimmt den Focus, auch wenn nur per Code selektiert wurde
- listBox1.Focus() 'Focus zurück zur Listbox
- End Sub
- Private Sub MenuItem_Click(ByVal sender As Object, ByVal e As EventArgs)
- Dim tabMenuItems = TabPageToolStripMenuItem.DropDownItems
- For i = 0 To tabMenuItems.Count - 1
- Dim itm = DirectCast(tabMenuItems(i), ToolStripMenuItem)
- Dim isSelected = itm Is sender
- itm.Checked = isSelected
- If isSelected Then tabControl1.SelectedIndex = i
- Next
- End Sub
- End Class
Erläuterung
Für List- und Combo-Box wird im Load jeweils DataSource und DisplayMember festgelegt, und im listControl_SelectedIndexChanged wird ihr SelectedIndex aufs TabControl übertragen.
Die MenüItem müssen erst codeseitig erzeugt, und per AddHandler ans MenuItem_Click angeschlossen werden.
In MenuItem_Click muß der Index für den gewünschten TabIndex erst ermittelt werden, und auch die Checked-Property aller Items korrekt gesetz wern - naja - auch kein Act.
Man muß sich halt für eine Steuerung entscheiden, weil so, wies hier gemacht ist, erfolgt keine Synchronisation der Listbox, wenn per Menü die Tab gewechselt wurde. Und umgekehrt auch nicht.
Weitere Ideen, ein TabControl zu pimpen, finden sich auf erweitertes TabControl