views:

1419

answers:

3

I want to have some labels on a form with the same font color as the caption on my group boxes, and furthermore I want these colors to change if the user has applied a different Theme on their system.

Can I do this without changing the GroupBox caption from its default?

UPDATE:

I have tried setting the Label ForeColor to ActiveCaption, this looks okay for the Default (Blue) scheme, but when I change the scheme to Olive Green, the label and group box captions are not the same.

Also, the GroupBox normal behaviour is that setting the FlatStyle to Standard sets the caption colour to ForeColor, however to create a new GroupBox and set its ForeColor to ControlText, you must first set it to something other than ControlText and then set it back again. (If you don't follow what I mean, then try it and see.)

A: 

The label exposes a ForeColorChanged event. You can then do something like this:

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

If however you're trying to detect when the user changes their Theme, you can hook into the SystemEvents which can be found in the Microsoft.Win32 namespace. Something like this:

    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;
        }
BFree
a) The OP wants the Label to take the color of the Groupbox b) The Groupbox.ForeColor isn't reliable
Henk Holterman
A: 

I assume you use Windows Forms and not WPF. When you apply colors use the system colors (e.g. Control or HighlightText) these will be changed when the user switch the windows theme. Here is the code to set the color of the group box to system color and then apply this color for a label:

groupBox1.ForeColor = SystemColors.ActiveBorder;
label1.ForeColor = groupBox1.ForeColor;
Andreas
+2  A: 

Hmm, same question? I'll repeat my post:

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;
      }
    }
Hans Passant
different question, my other question (http://stackoverflow.com/questions/590637/how-do-i-set-the-groupbox-caption-colour) was about how to change the color of the caption on a groupbox. I like this answer, but only as an answer to this question, not the other one.
Patrick McDonald