2009-02-26 9 views
4

Je veux avoir des étiquettes sur un formulaire avec la même couleur de police que la légende sur mes boîtes de groupe, et de plus je veux que ces couleurs changent si l'utilisateur a appliqué un thème différent sur leur système. Est-ce que je peux faire ceci sans changer la légende de GroupBox de sa valeur par défaut?Comment définir la couleur de la police d'un libellé comme la couleur de la légende d'un GroupBox?

MISE À JOUR:

J'ai essayé de placer l'étiquette ForeColor ActiveCaption, cela semble correct pour le défaut système (bleu), mais quand je change le système d'Olive verte, les étiquettes et les légendes de la boîte groupe ne sont pas les même. En outre, le comportement normal de GroupBox est que la définition de FlatStyle sur Standard définit la couleur de la légende sur ForeColor. Toutefois, pour créer un nouveau GroupBox et définir sa propriété ForeColor sur ControlText, vous devez d'abord le définir sur autre chose que ControlText. retour à nouveau. (Si vous ne suivez pas ce que je veux dire, essayez-le et voyez.)

+0

Intéressant, une Groupbox fait de la supercherie avec sa ForeColor sauf si elle est explicitement définie. –

+0

J'ai rencontré le même problème! – nawfal

Répondre

9

Hmm, même question? Je vais répéter mon article:

using System.Windows.Forms.VisualStyles; 
... 

    public Form1() 
    { 
     InitializeComponent(); 
     if (Application.RenderWithVisualStyles) 
     { 
     VisualStyleRenderer rndr = new VisualStyleRenderer(VisualStyleElement.Button.GroupBox.Normal); 
     Color c = rndr.GetColor(ColorProperty.TextColor); 
     label1.ForeColor = c; 
     } 
    } 
+0

question différente, mon autre question (http://stackoverflow.com/questions/590637/how-do-i-set-the-groupbox-caption-colour) était environ comment changer la couleur de la légende sur une boîte de groupe. J'aime cette réponse, mais seulement comme une réponse à cette question, pas l'autre. –

+0

Sooooo utile. Merci! – nawfal

0

L'étiquette expose un événement ForeColorChanged. Vous pouvez alors faire quelque chose comme ceci:

this.label1.ForeColorChanged += (o,e) => { this.groupBox1.ForeColor = this.label1.ForeColor;}; 

Si toutefois vous essayez de détecter lorsque l'utilisateur change son thème, vous pouvez accrocher dans les SystemEvents qui se trouvent dans l'espace de noms Microsoft.Win32. Quelque chose comme ceci:

Microsoft.Win32.SystemEvents.UserPreferenceChanged += new Microsoft.Win32.UserPreferenceChangedEventHandler(SystemEvents_UserPreferenceChanged); 

void SystemEvents_UserPreferenceChanged(object sender, Microsoft.Win32.UserPreferenceChangedEventArgs e) 
     { 
      this.groupBox1.ForeColor = this.label1.ForeColor; 
     } 
+0

a) L'OP veut que l'étiquette prenne la couleur de la Groupbox b) La Groupbox.ForeColor n'est pas fiable –

0

Je suppose que vous utilisez Windows Forms et non WPF. Lorsque vous appliquez des couleurs, utilisez les couleurs du système (par exemple, Control ou HighlightText), elles seront modifiées lorsque l'utilisateur changera le thème Windows. Voici le code pour définir la couleur de la boîte de groupe à la couleur du système et ensuite appliquer cette couleur pour une étiquette:

groupBox1.ForeColor = SystemColors.ActiveBorder; 
label1.ForeColor = groupBox1.ForeColor; 
1

Des regards de celui-ci un GroupBox dessine est la légende avec SystemColors.ActiveCaption, mais vous Je dois vérifier cela avec d'autres thèmes.

Etrangement, cela n'est pas reflété dans la propriété ForeColor, mais si vous définissez cette propriété, elle prend le relais.

La réponse est:

private void Form1_Load(object sender, EventArgs e) 
{    
    label1.ForeColor = SystemColors.ActiveCaption; 
} 
+0

Il semble que ce n'est pas le cas, j'ai mis la couleur à ActiveCaption, mais quand j'ai changé le schéma de couleurs à Olive Green, la légende de la boîte de groupe passe à l'orange et l'étiquette à la couleur verte –

+0

C'était juste une correspondance sur la couleur. Lorsque vous ouvrez le colorpicker dans VS sous vert olive, toute autre chose qui ressemble à l'orange? –

+0

Pas que je puisse voir, je vais continuer à chercher –

Questions connexes