Как установить цвет шрифта надписи на цвет заголовка GroupBox? - PullRequest
4 голосов
/ 26 февраля 2009

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

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

UPDATE:

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

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

Ответы [ 4 ]

10 голосов
/ 26 февраля 2009

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

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;
      }
    }
1 голос
/ 26 февраля 2009

Судя по всему, GroupBox рисует заголовок с SystemColors.ActiveCaption, но вам придется проверить это с другими темами.

Как ни странно, это не отражается в свойстве ForeColor, но если вы установите это свойство, оно вступит во владение.

Итак, ответ:

private void Form1_Load(object sender, EventArgs e)
{            
  label1.ForeColor = SystemColors.ActiveCaption;
}
0 голосов
/ 26 февраля 2009

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

groupBox1.ForeColor = SystemColors.ActiveBorder;
label1.ForeColor = groupBox1.ForeColor;
0 голосов
/ 26 февраля 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;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...