Ich habe keine Eigenschaft eines Registerkarten-Containers gefunden, um die Hintergrundfarbe der Leiste zu ändern, die die Registerkarten enthält, wie kann ich das tun?
Antworten
Zu viele Anzeigen?Die Hintergrundfarbe eines TabControls wird von seinem Elternteil geerbt.
Platzieren Sie einen Bereich auf dem Formular, der die gleiche Position und Größe wie das TabControl hat, setzen Sie Ihr TabControl in diesen Bereich und stellen Sie Dock auf 'Füllen'.
Oder die gleiche Methode im Code:
private void Form1_Load(object sender, EventArgs e)
{
Panel tabBackground = new Panel
{
Location = tabControl1.Location,
Size = tabControl1.Size,
// Your color here
BackColor = Color.Magenta
};
tabBackground.Controls.Add(tabControl1);
Controls.Add(tabBackground);
tabControl1.Dock = DockStyle.Fill;
}
http://rajeshkm.blogspot.com/2006/07/how-to-change-color-of-tab-control-in.html
Lesen Sie unbedingt den ersten Kommentar, da er eine Korrektur enthält, die den Code kompilierbar macht.
Alarm für entliehenen (und korrigierten) Code:
private void ChangeTabColor(object sender, DrawItemEventArgs e)
{
Font TabFont;
Brush BackBrush = new SolidBrush(Color.Green); //Set background color
Brush ForeBrush = new SolidBrush(Color.Yellow);//Set foreground color
if (e.Index == this.tabControl1.SelectedIndex)
{
TabFont = new Font(e.Font, FontStyle.Italic | FontStyle.Bold);
}
else
{
TabFont = e.Font;
}
string TabName = this.tabControl1.TabPages[e.Index].Text;
StringFormat sf = new StringFormat();
sf.Alignment = StringAlignment.Center;
e.Graphics.FillRectangle(BackBrush, e.Bounds);
Rectangle r = e.Bounds;
r = new Rectangle(r.X, r.Y + 3, r.Width, r.Height - 3);
e.Graphics.DrawString(TabName, TabFont, ForeBrush, r, sf);
//Dispose objects
sf.Dispose();
if (e.Index == this.tabControl1.SelectedIndex)
{
TabFont.Dispose();
BackBrush.Dispose();
}
else
{
BackBrush.Dispose();
ForeBrush.Dispose();
}
}
Um dies in Ihrem Code zu verwenden, fügen Sie diese Zeile in das Ladeereignis Ihres Formulars ein:
tabControl1.DrawItem += ChangeTabColor.