2008-09-15 4 views
0

Wenn Sie das Standard-Tab-Steuerelement in .NET für Ihre Registerkarten verwenden und Sie versuchen, das Aussehen ein wenig zu ändern, dann können Sie die Hintergrundfarbe der Registerkarten aber nicht für das Registersteuerelement ändern. Die Eigenschaft ist verfügbar, Sie können sie festlegen, aber sie hat keine Auswirkungen. Wenn du die Hintergrundfarbe der Seiten änderst und nicht die des Tabs, dann sieht es ... ähm ziemlich hässlich aus.Warum funktioniert BackColor nicht für TabControls in .NET?

Ich weiß, Microsoft will nicht festgelegt werden. MSDN: ' Diese Eigenschaft unterstützt die .NET Framework-Infrastruktur und soll nicht direkt aus Ihrem Code verwendet werden. Dieses Mitglied ist für dieses Steuerelement nicht sinnvoll. 'Eine Steuereigenschaft nur für Farbe, die die .NET-Infrastruktur unterstützt? ...Kaum zu glauben.

Ich hoffte im Laufe der Jahre Microsoft würde es ändern, aber sie taten es nicht. Ich habe meine eigene TabControl-Klasse erstellt, die die Paint-Methode außer Kraft setzt, um dies zu beheben. Aber ist das wirklich die beste Lösung?

Was ist der Grund dafür, dass BackColor für dieses Steuerelement nicht unterstützt wird? Was ist Ihre Lösung, um das zu beheben? Gibt es eine bessere Lösung als die Farbmethode zu überschreiben?

+0

Fragen, warum MS etwas getan hat, ist ein wenig unbeantwortbar. Sie sollten Ihre Frage neu formulieren. – GEOCHET

Antwort

1

Die Hintergrundfarbe der Registerkarte scheint durch die Anzeigeeigenschaften des OS gesteuert werden. Insbesondere die Registerkarte Aussehen, Windows und Schaltflächen (Windows XP). Wenn der klassische Windows-Stil festgelegt ist, ändert sich die Farbe der Registerkarte nicht. Wenn es auf Windows XP-Stil eingestellt ist, ändert es sich mindestens von Grau zu Weiß, wenn es ausgewählt wird. Es ist also nicht möglich, die Hintergrundfarbe zu steuern!

2

Die Lösung in Rajeshs Blog ist wirklich nützlich, aber es färbt nur den Tab-Teil der Kontrolle. In meinem Fall hatte ich eine Tabcontrol auf einem anderen farbigen Hintergrund. Die Tabs selbst waren grau, was kein Problem war, aber der Bereich rechts von den Tabs wurde als grauer Streifen angezeigt.

Um diese Farbe in die Farbe Ihres Hintergrunds zu ändern, müssen Sie der DrawItem-Methode den folgenden Code hinzufügen (wie in Rajeshs Lösung beschrieben). Ich verwende VB.Net:

... 

Dim r As Rectangle = tabControl1.GetTabRect(tabControl1.TabPages.Count-1) 
Dim rf As RectangleF = New RectangleF(r.X + r.Width, r.Y - 5, tabControl1.Width - (r.X + r.Width), r.Height + 5) 
Dim b As Brush = New SolidBrush(Color.White) 
e.Graphics.FillRectangle(b, rf) 

... 

Grundsätzlich müssen Sie das Rechteck von der rechten Seite der letzten Lasche an der rechten Seite der Registerkarte gemacht und dann füllen Sie es auf die gewünschte Farbe.

0

Danke, LauraM. Du hast geholfen, mich auf die richtige Spur zu bringen. Ich hatte bereits die Verbindung gefunden, die Oskar zur Verfügung gestellt hatte, aber das hat am Ende nichts für den Streifen getan.

Am Ende musste ich ziemlich viel ändern, weil ich ein Hintergrundbild auf dem Formular benötigt, um durch zu bluten, oder wenn das Elternteil etwas ohne ein Hintergrundbild war, die Hintergrundfarbe. Ich brauchte auch Icons, um zu zeigen, ob sie anwesend waren. Ich habe einen vollständigen Bericht mit dem ganzen Code in meinem TabControl BackColor fix post.

+1

Vielen Dank für diesen Blogeintrag. Oh warte, nein, hast du nicht. –

Verwandte Themen