Как мне установить цвет шрифта метки таким же, как цвет заголовка GroupBox?

Я хочу, чтобы в форме было несколько меток с тем же цветом шрифта, что и заголовок в полях моей группы, и, кроме того, я хочу, чтобы эти цвета менялись, если пользователь применил другую тему в своей системе.

Могу ли я сделать это, не меняя заголовок GroupBox по умолчанию?

ОБНОВИТЬ:

Я попытался установить для Label ForeColor значение ActiveCaption, это выглядит нормально для схемы по умолчанию (синяя), но когда я меняю схему на Olive Green, заголовки метки и группового поля не совпадают.

Кроме того, нормальное поведение GroupBox заключается в том, что установка FlatStyle на Standard устанавливает цвет заголовка на ForeColor, однако, чтобы создать новый GroupBox и установить его ForeColor на ControlText, вы должны сначала установить для него значение, отличное от ControlText, а затем снова установить его. (Если вы не понимаете, что я имею в виду, попробуйте и убедитесь.)


person Patrick McDonald    schedule 26.02.2009    source источник
comment
Столкнулся с такой же бедой!   -  person nawfal    schedule 21.09.2011


Ответы (3)


Хм, тот же вопрос? Повторю свой пост:

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;
      }
    }
person Hans Passant    schedule 26.02.2009
comment
другой вопрос, мой другой вопрос (stackoverflow.com/questions/590637/) был посвящен тому, как изменить цвет заголовка в групповом поле. Мне нравится этот ответ, но только как ответ на этот вопрос, а не на другой. - person Patrick McDonald; 26.02.2009

Метка предоставляет событие ForeColorChanged. Затем вы можете сделать что-то вроде этого:

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

Однако, если вы пытаетесь определить, когда пользователь меняет свою тему, вы можете подключиться к SystemEvents, которую можно найти в пространстве имен Microsoft.Win32. Что-то вроде этого:

    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;
        }
person BFree    schedule 26.02.2009

Я предполагаю, что вы используете Windows Forms, а не WPF. Когда вы применяете цвета, используйте системные цвета (например, Control или HighlightText), они будут изменены, когда пользователь переключит тему Windows. Вот код, чтобы установить цвет группового поля на системный цвет, а затем применить этот цвет для метки:

groupBox1.ForeColor = SystemColors.ActiveBorder;
label1.ForeColor = groupBox1.ForeColor;
person Andreas    schedule 26.02.2009