[英]How to change all label forecolor with a click of a button
我想創建一個按鈕,通過單擊按鈕可以更改標簽的原色。 但是,每當我單擊該按鈕時,它只會更改不在面板中的標簽的原色。 這是我的代碼:
private void button1_Click(object sender, EventArgs e)
{
this.BackColor = Color.White;
foreach(Control l in Controls)
{
if(l is Label)
{
l.ForeColor = Color.Black;
}
}
}
我試過使用
private void button1_Click(object sender, EventArgs e)
{
this.BackColor = Color.White;
foreach(Label l in Controls)
{
l.ForeColor = Color.Black;
}
}
但是它給我一個錯誤,提示它無法將類型為System.Windows.Forms.Panel
對象System.Windows.Forms.Panel
為類型為System.Windows.Forms.Label
。
您可以使用Linq過濾控件:
foreach (Label l in Controls.OfType<Label>())
{
l.ForeColor = Color.Black;
}
編輯:
如果您擁有更深層次的控件層次結構,則可以遞歸進行:
private void SetLabelBlack(Control ctrl)
{
foreach (Control c in ctrl.Controls)
{
Label l = c as Label;
if (l != null)
{
l.ForeColor = Color.Black;
}
else
{
SetLabelBlack(c);
}
}
}
並這樣稱呼它:
SetLabelBlack(this);
你不可以做這個
foreach(Label l in Controls)
因為並非Control
中的所有Controls
都是Label
類型
用LINQ做
foreach(Label l in panel.Controls.OfType<Label>())
l.ForeColor = Color.Black
這樣,您首先將有選擇地僅從Controls
獲得Label
類型的Control
。
編輯:
如果您以一種形式包含多個面板,並且想要更改所有面板中標簽的所有顏色,則可以執行多次循環
foreach(Panel p in Controls.OfType<Panel>())
foreach(Label l in p.Controls.OfType<Label>())
l.ForeColor = Color.Black;
並且,以防萬一您有一些不在面板中但在表單中的Label
,您可以將上述內容與
foreach(Label l in Controls.OfType<Label>())
l.ForeColor = Color.Black;
由於錯誤提示您必須檢查其類型!
private void button1_Click(object sender, EventArgs e)
{
this.BackColor = Color.White;
foreach(Control l in Controls)
{
if(l.GetType()==typeof(System.Windows.Forms.Label))
{
l.ForeColor = Color.Black;
}
}
}
在列表(列表)中添加要更新的所有標簽。 然后遍歷該列表中的所有標簽並更新前景色。 panel.Controls僅返回該面板中的控件,因此,如果要更新的標簽不在該面板面板中。Controls將不起作用,此外,它僅迭代該面板的直接子代。 在面板中,您可以擁有另一個包含面板等的面板。
foreach(Control c in this.Controls)
{
if(c is Label)
{
Label b = c as Label;
b.ForeColor = Color.White;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.