2008-09-15 20 views
0

Si vous utilisez le contrôle de tabulation standard dans .NET pour vos pages à onglet et que vous essayez de modifier légèrement l'aspect et la convivialité, vous pouvez modifier la couleur de fond des pages à onglet, mais pas celle du contrôle à onglet. La propriété est disponible, vous pouvez le définir mais cela n'a aucun effet. Si vous changez la couleur de retour des pages et non du contrôle onglet, il semble ... uhm plutôt moche.Pourquoi BackColor ne fonctionne pas pour TabControls dans .NET?

Je sais que Microsoft ne veut pas que ce soit réglé. MSDN: ' Cette propriété prend en charge l'infrastructure .NET Framework et n'est pas destinée à être utilisée directement à partir de votre code. Ce membre n'a pas de signification pour ce contrôle. 'Une propriété de contrôle juste pour la couleur qui supporte l'infrastructure .NET? ...difficile à croire.

J'espérais qu'au fil des ans, Microsoft changerait, mais ils ne l'ont pas fait. J'ai créé ma propre classe TabControl qui remplace la méthode de peinture pour résoudre ce problème. Mais est-ce vraiment la meilleure solution?

Quelle est la raison de ne pas prendre en charge BackColor pour ce contrôle? Quelle est votre solution pour résoudre ce problème? Y a-t-il une meilleure solution que de remplacer la méthode de peinture?

+0

Demander pourquoi MS a fait quelque chose est un peu impossible. Vous devriez reformuler votre question. – GEOCHET

Répondre

1

La couleur d'arrière-plan de l'onglet semble être contrôlé par les propriétés d'affichage de l'OS. Plus précisément, sous l'onglet apparence, la propriété Windows et les boutons (Windows XP). Lorsqu'il est défini sur le style Windows Classic, l'onglet ne change jamais de couleur. Lorsqu'il est défini sur le style Windows XP, il passe au moins du gris au blanc lorsqu'il est sélectionné. Donc, ne pas être en mesure de contrôler la couleur de fond est une fonctionnalité!

2

La solution dans le blog de Rajesh est vraiment utile, mais elle ne colore que la partie onglet du contrôle. Dans mon cas, j'avais un tabcontrol sur un fond de couleur différente. Les onglets eux-mêmes étaient gris ce qui n'était pas un problème, mais la zone à droite des onglets affichait une bande grise.

Pour modifier cette couleur à la couleur de votre arrière-plan, vous devez ajouter le code suivant à la méthode DrawItem (comme décrit dans la solution de Rajesh). J'utilise 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) 

... 

Fondamentalement, vous devez obtenir le rectangle fait du côté droit du dernier onglet du côté droit du contrôle onglet, puis remplissez-le à votre couleur désirée.

0

Merci, LauraM. Vous m'avez aidé à me mettre sur la bonne voie. J'avais déjà trouvé le lien Oskar fourni mais cela n'a rien fait pour le Strip à la fin. En fin de compte, j'ai dû changer un peu parce que j'avais besoin d'une image d'arrière-plan sur le formulaire pour saigner ou si le parent était quelque chose sans une image d'arrière-plan, le backcolor. J'avais aussi besoin d'icônes pour montrer si elles étaient présentes. J'ai une écriture complète avec tout le code dans mon TabControl BackColor fix post.

+1

Merci beaucoup d'avoir gardé cet article de blog. Oh attends, non tu ne l'as pas fait. –