Benutzer mit den meisten Antworten
Eigenes TabControl

Frage
-
Hallo zusammen
Ich möchte ein eigenes TabControl haben, welches die einzelnen TabPages blau statt weiss bringt. Eigentlich ist es ganz einfach. Ich brauche nur die Hintergrundfarbe jedes TabControl zu ändern und schon habe ich das was ich wollte. Nun möchte ich aber ein eigenes TabControl machen, welches die TabPage Standardmässig blau hat. Dabei soll es sich zur Entwurfszeit gleich verhalten wie das normale TabControl.
So wie ich das sehe, muss ich folgendes überschriben:
- TabControl
- TabControl.TabPageCollection
- TabPage
Das habe ich versucht. Leider enthält nun mein TabControl je 2 TabPage. 2 TabPage vom uhrprünglichen TabControl und 2 TapPage von meinem TabControl.
So wie ich das sehe ist das nicht ganz so einfach mit dem TabControl. Weiss jemand wie man das richtig überschreibt??
Gruss Marcel
Antworten
-
Hallo Marcel,
Ich möchte ein eigenes TabControl haben, welches die einzelnen TabPages blau statt weiss bringt. Eigentlich ist es ganz einfach. Ich brauche nur die Hintergrundfarbe jedes TabControl zu ändern und schon habe ich das was ich wollte. Nun möchte ich aber ein eigenes TabControl machen, welches die TabPage Standardmässig blau hat. Dabei soll es sich zur Entwurfszeit gleich verhalten wie das normale TabControl.
wenn Du Dir nicht viel Arbeit damit machen möchtest, kannst Du die OnControlAdded Methode überschreiben und dort die Stanadardfarbe für die eingefügten TabPages festlegen:
Public Class MyTab Inherits TabControl Protected Overrides Sub OnControlAdded(ByVal e As System.Windows.Forms.ControlEventArgs) If TypeOf e.Control Is TabPage Then DirectCast(e.Control, TabPage).BackColor = Color.Blue End If MyBase.OnControlAdded(e) End Sub End Class
Wenn generell keine andere Hintergrundfarbe gesetzt werden soll, kann man auch noch auf das BackColorChanged Ereignis reagieren:
Public Class MyTab Inherits TabControl Protected Overrides Sub OnControlAdded(ByVal e As System.Windows.Forms.ControlEventArgs) If TypeOf e.Control Is TabPage Then Dim lTab As TabPage = DirectCast(e.Control, TabPage) lTab.BackColor = Color.Blue AddHandler lTab.BackColorChanged, AddressOf TabBackColorChanged End If MyBase.OnControlAdded(e) End Sub Protected Overrides Sub OnControlRemoved(ByVal e As System.Windows.Forms.ControlEventArgs) If TypeOf e.Control Is TabPage Then Dim lTab As TabPage = DirectCast(e.Control, TabPage) RemoveHandler lTab.BackColorChanged, AddressOf TabBackColorChanged End If MyBase.OnControlRemoved(e) End Sub Private Sub TabBackColorChanged(ByVal sender As Object, ByVal e As EventArgs) Dim lTab As TabPage = DirectCast(sender, TabPage) RemoveHandler lTab.BackColorChanged, AddressOf TabBackColorChanged lTab.BackColor = Color.Blue AddHandler lTab.BackColorChanged, AddressOf TabBackColorChanged End Sub End Class
Das als pragmatischer Ansatz, da Du uns Deinen nicht verraten hast.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort markiert Marcel Garaventa RTC Freitag, 17. September 2010 09:36
Alle Antworten
-
Hallo Marcel,
Ich möchte ein eigenes TabControl haben, welches die einzelnen TabPages blau statt weiss bringt. Eigentlich ist es ganz einfach. Ich brauche nur die Hintergrundfarbe jedes TabControl zu ändern und schon habe ich das was ich wollte. Nun möchte ich aber ein eigenes TabControl machen, welches die TabPage Standardmässig blau hat. Dabei soll es sich zur Entwurfszeit gleich verhalten wie das normale TabControl.
wenn Du Dir nicht viel Arbeit damit machen möchtest, kannst Du die OnControlAdded Methode überschreiben und dort die Stanadardfarbe für die eingefügten TabPages festlegen:
Public Class MyTab Inherits TabControl Protected Overrides Sub OnControlAdded(ByVal e As System.Windows.Forms.ControlEventArgs) If TypeOf e.Control Is TabPage Then DirectCast(e.Control, TabPage).BackColor = Color.Blue End If MyBase.OnControlAdded(e) End Sub End Class
Wenn generell keine andere Hintergrundfarbe gesetzt werden soll, kann man auch noch auf das BackColorChanged Ereignis reagieren:
Public Class MyTab Inherits TabControl Protected Overrides Sub OnControlAdded(ByVal e As System.Windows.Forms.ControlEventArgs) If TypeOf e.Control Is TabPage Then Dim lTab As TabPage = DirectCast(e.Control, TabPage) lTab.BackColor = Color.Blue AddHandler lTab.BackColorChanged, AddressOf TabBackColorChanged End If MyBase.OnControlAdded(e) End Sub Protected Overrides Sub OnControlRemoved(ByVal e As System.Windows.Forms.ControlEventArgs) If TypeOf e.Control Is TabPage Then Dim lTab As TabPage = DirectCast(e.Control, TabPage) RemoveHandler lTab.BackColorChanged, AddressOf TabBackColorChanged End If MyBase.OnControlRemoved(e) End Sub Private Sub TabBackColorChanged(ByVal sender As Object, ByVal e As EventArgs) Dim lTab As TabPage = DirectCast(sender, TabPage) RemoveHandler lTab.BackColorChanged, AddressOf TabBackColorChanged lTab.BackColor = Color.Blue AddHandler lTab.BackColorChanged, AddressOf TabBackColorChanged End Sub End Class
Das als pragmatischer Ansatz, da Du uns Deinen nicht verraten hast.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort markiert Marcel Garaventa RTC Freitag, 17. September 2010 09:36
-
Hallo Thorsten
Genau eine so einfache Lösung habe ich gesucht. Nur leider funktioniert bei mir dies nicht. Wenn ich meine TabPage auf ein Fenster ziehe sind die beiden vorhandenen TapPage immer noch Transparent. Auch die neuen TapPage die ich dann in den Eigenschaften zufüge sind Transparent.
Im Moment sieht die Klasse so aus:
Imports System.Drawing
<ToolboxBitmap(GetType(System.Windows.Forms.TabControl))> _
Public Class TabControl
Inherits System.Windows.Forms.TabControl#Region "Methoden"
Protected Overrides Sub OnControlAdded(ByVal e As System.Windows.Forms.ControlEventArgs)
If TypeOf e.Control Is TabPage Then
DirectCast(e.Control, TabPage).BackColor = Color.FromArgb(216, 228, 243)
End If
MyBase.OnControlAdded(e)
End Sub
#End Region
End ClassDie Klasse ist in einem anderen Namespace und darf aus diesen Grund gleich hiessen. Muss ich noch eine andere Methode überschrieben ??
Gruss Marcel