2009-02-26 96 views
4

我想在窗體上使用與我的組框上的標題相同的字體顏色標註一些標籤,並且我希望這些顏色在用戶的系統中應用了不同的主題時進行更改。如何將標籤的字體顏色設置爲與GroupBox的標題顏色相同?

我可以在不更改GroupBox標題的默認值的情況下執行此操作嗎?

UPDATE:

我已經嘗試設置標籤前景色到ActiveCaption,這看起來不錯的默認(藍)方案,但是當我改變計劃,橄欖綠,標籤和組框的標題是不相同。

另外,GroupBox的常規行爲是將FlatStyle設置爲Standard將標題顏色設置爲ForeColor,但是要創建新的GroupBox並將其ForeColor設置爲ControlText,必須先將其設置爲ControlText以外的其他設置,然後設置它又回來了。 (如果您不遵循我的意思,請嘗試一下並看看。)

+0

有趣的是,一個Groupbox做一些與它的ForeColor技巧,除非它明確設置。 – 2009-02-26 15:37:33

+0

我跑過同樣的麻煩! – nawfal 2011-09-21 01:57:22

回答

9

嗯,同樣的問題?我會重複我的文章:

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

標籤公開ForeColorChanged事件。然後,您可以做這樣的事情:

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

然而,如果你想,當用戶改變他們的主題檢測,你可以連接到可在Microsoft.Win32命名空間中發現的SystemEvents。這樣的事情:

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)OP希望標籤採用Groupbox的顏色 b)Groupbox.ForeColor不可靠 – 2009-02-26 15:53:15

0

我假設你使用Windows窗體而不是WPF。當您應用顏色時,使用系統顏色(例如Control或HighlightText),這些將在用戶切換Windows主題時更改。下面是該組框的顏色設置爲系統顏色,然後將此顏色標籤代碼:

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

從它的分組框繪製它的標題與SystemColors.ActiveCaption長相,但你會必須檢查與其他主題。

奇怪的是,這並不反映在ForeColor屬性中,但是如果你設置了它的屬性,它會接管。

所以答案是:

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

看來情況並非如此,我將顏色設置爲ActiveCaption,但是當我更改顏色方案時到橄欖綠色,組框標題變成橙色,標籤變成綠色 – 2009-02-26 16:14:58