簡體   English   中英

如何通過單擊按鈕更改所有標簽的原色

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM