Wie ändere ich die Hintergrundfarbe von tab-Steuerelement in Winforms?
Gibt es eine Möglichkeit, ändern Sie die Hintergrundfarbe von einem Registerkarten-Steuerelement in winforms, so dass er nicht über den weißen Rand um ihn herum?
Ich habe versucht ein paar verschiedene Möglichkeiten, aber Sie alle führen in die gleiche weiße Rahmen angezeigt werden.
- Der einzige Weg dies zu erreichen, ist gezeichnet von der tabcontrol-Steuerelement selbst. Hier als Beispiel auf CodeProject.com
- Nein, Sie bekommen das Thema Farben. Sie können deaktivieren Sie visuelle Stile für die Kontrolle, sondern, dass die resorts es zurück zum Schlachtschiff-Grau, noch ohne eine Möglichkeit, dies zu ändern.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann ich nur denken, der Sie Ihr Aussehen ändern Eigenschaft auf die Tasten
MSDN TabControl Aussehen
TabControl
hat sehr wenig Unterstützung für die Anpassung. Ich habe diese benutzerdefinierte Registerkarten-Steuerelement mit gutem Erfolg. Der code ist ziemlich brauchbar wenn Sie wollen das Aussehen ändern, wie ich es Tat.Zunächst müssen Sie eine abgeleitete Klasse von TabControl. So weit So gut, aber jetzt wird es schmutzig.
Weil TabControl nicht nennen
OnPaint
wir haben wollen, überschreibenWndProc
behandeln der WM_PAINT-Nachricht. Dort gehen wir vor und malen unseren hintergrund mit der Farbe, die wir mögen.Im eine weitere Zeichnung, die in dieser Methode, so sieht es ein wenig overkill für das problem, sondern ignorieren Sie einfach die unnötigen Sachen.
Beachten Sie auch die
foreach
Schleife. Ich komme später.Das Problem ist, dass
TabControl
Farben seiner Elemente (der tab-Titel) vor seine eigenen WM_PAINT, so ist der hintergrund gezeichnet werden, auf der Oberseite, die macht Sie unsichtbar. Um dieses Problem zu lösen habe ich einEventHandler
fürDrawItem
die aussieht wie die folgende:Ich bin speichern die
DrawItemEventArgs
in einem Wörterbuch (die sogenannte "ItemArgs" in meinem Fall), damit ich später darauf zugreifen kann. Das ist, wo dieforeach
von ein paar Sekunden ins Spiel kommt. Es wird eine Methode aufgerufen, wo ich bin Malerei der Registerkarte Kopfzeilen, welche dieDrawItemEventArgs
die wir gespeichert haben, bevor Sie als parameter zu malen, das die Gegenstände in den korrekten Zustand und die position.So, in Kürze sind wir abfangen der Zeichnung der Registerkarte Kopfzeilen zu verzögern, bis wir fertig sind zeichnen der hintergrund.
Diese Lösung ist nicht optimal, aber es funktioniert und das ist die einzige Sache, die Sie tun können, um mehr Kontrolle über
TabControl
(lol) ohne Malerei von Grund auf.Noch einfacher (IMO): hinzufügen eines paint-handler zu der TabPage (nicht die top-level-TabControl-Steuerelement, aber die TabPage(s), die innerhalb es, dann malen Sie die hintergrund-Rechteck in der Farbe, die Sie wollen.
Entweder im designer oder "von hand" eine Paint-event-handler zu der TabPage:
In der paint-Methode, malen Sie die Seite Rechteck der gewünschten Farbe (in meinem Fall, ich will es, befolgen Sie die standard-BackColor):
Drop-Panel auf der Oberseite (nicht innen), das Register-Steuerelement, und legen Sie die Farbe in den Eigenschaften.
Rufen Sie Panelx.Hide() und Panelx.Zeigen Sie() nach Bedarf.