2009-10-13 6 views
2

J'essaye d'ajouter la couleur de police et la couleur de fond pour les onglets créés dans le tabcontrol et également la couleur de fond pour l'endroit qui est vide sans onglets. Parce que mon tabcontrol est étiré à la taille de mon formulaire en plein écran. Dites si un seul onglet est créé dans le tabcontrol, la couleur d'arrière-plan de l'onglet doit être de couleur bleue et le reste de tabcontrol doit être de couleur bleu foncé. La couleur par défaut est gris pour ça, ce qui est très moche. J'utilise le code ci-dessous, qui fonctionne très bien pour la couleur de police et la couleur d'arrière-plan de l'onglet. Mais je ne reçois pas la couleur bg pour le reste des places.Couleur d'arrière-plan pour Tabcontrol dans l'application C# windows

ai-je rien manqué?

 private void tabControl1_DrawItem_1(object sender, DrawItemEventArgs e) 
    { 
      //set color for Background 
      Brush BG_BackBrush = new SolidBrush(Color.FromArgb(111, 111, 111)); //Set background color 
      //Rectangle BG_r = e.Bounds; 
      Rectangle BG_r = new Rectangle(1682, 34, this.Width - 2, this.Height - 2); 
      BG_r = new Rectangle(BG_r.X, BG_r.Y + 8, BG_r.Width, BG_r.Height - 3); 
      e.Graphics.FillRectangle(BG_BackBrush, e.Bounds); 


      //set color for Tabs 
      Font TabFont; 
      Brush BackBrush = new SolidBrush(Color.FromArgb(147, 188, 200)); //Set background color 
      Brush ForeBrush = new SolidBrush(Color.FromArgb(11, 51, 106));//Set foreground color 


      if (e.Index == TaskBarRef.tabControl1.SelectedIndex) 
      { 
       TabFont = new Font(e.Font, FontStyle.Bold); 
      } 
      else 
      { 
       TabFont = new Font(e.Font, FontStyle.Regular); 
      } 
      Rectangle r = e.Bounds; 
      r = new Rectangle(r.X, r.Y + 8, r.Width, r.Height - 3); 

      string TabName = TaskBarRef.tabControl1.TabPages[e.Index].Text; 
      StringFormat sf = new StringFormat(); 
      sf.Alignment = StringAlignment.Center; 

      e.Graphics.FillRectangle(BackBrush, e.Bounds); 
      e.Graphics.DrawString(TabName, TabFont, ForeBrush, r, sf); 

      sf.Dispose(); 




      if (e.Index == TaskBarRef.tabControl1.SelectedIndex) 
      { 
       TabFont.Dispose(); 
       BackBrush.Dispose(); 
      } 
      else 
      { 
       BackBrush.Dispose(); 
       ForeBrush.Dispose(); 
      } 
    } 
+0

Observation: Vous utilisez '' TabFont' et ForeBrush' en même temps, Pourtant, vous en disposez en exclusivité. Cela ne semble pas du tout correct! – leppie

Répondre

1

Je voudrais vérifier this exemple de projet de code. Il montre comment colorer les onglets ainsi que l'ensemble du contrôle sélectionné.

Dans votre exemple, vous pouvez changer le BackBrush à une brosse solide et ajoutez ceci avant la ligne sf.Dispose:

TaskBarRef.tabControl1.TabPages[e.Index].BackColor = BackBrush.Color;