星期一, 11月 24, 2014

[C#] 改變 GroupBox 內 Label 的背景顏色

技術論壇問題
groupBox 裡 放幾個label 想改變 label 的背景顏色
以往尋找物件都是利用 Controls.Find() 和 foreach 搭配 ofType<控件類型> 來找出控件並進行處理,在這個討論中發現,把欲尋找控件加入 List<控件類型> 中,再掃 List <控件類型>,也是一種處理方式,檢單筆記一下
namespace GroupLabel
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            cboSelect.DropDownStyle = ComboBoxStyle.DropDownList;
            for (int i = 1; i <= 10; i++)
            {
                string item = string.Format("Label{0}", i);
                cboSelect.Items.Add(item);
            }

            btnOdd.Click += btnClick;
            btnEven.Click += btnClick;
        }

        private void cboSelect_SelectedIndexChanged(object sender, EventArgs e)
        {
            // 利用 Control.Find 來尋找 Label 控件
            string target = cboSelect.SelectedItem.ToString();
            if (string.IsNullOrEmpty(target)) return;

            Control[] labels = gbLabel.Controls.Find(target, false);
            if (labels.Length == 0) return;
            if (!(labels[0] is Label)) return;

            Label lbl = labels[0] as Label;
            if (lbl == null) return;

            colorReset();
            lbl.ForeColor = Color.White;
            lbl.BackColor = Color.Red;
        }

        private void colorReset()
        {
            // 掃 gpLabel 內的 Label 控件
            foreach (Label lbl in gbLabel.Controls.OfType<Label>())
            {
                lbl.BackColor = SystemColors.Control;
                lbl.ForeColor = Color.Black;
            }
        }

        private void btnClick(object sender, EventArgs e)
        {
            // 把欲變色的 Label 控件,加入 List<Label> 中,掃 List<Label> 來進行變色
            string btnName = ((Button)sender).Name;

            List<Label> lstLabels = new List<Label>();
            if (btnName == "btnOdd")
            {
                lstLabels.Add(label1);
                lstLabels.Add(label3);
                lstLabels.Add(label5);
                lstLabels.Add(label7);
                lstLabels.Add(label9);
            }
            else
            {
                // btnName == "btnEven"

                lstLabels.Add(label2);
                lstLabels.Add(label4);
                lstLabels.Add(label6);
                lstLabels.Add(label8);
                lstLabels.Add(label10);
            }

            colorReset();
            foreach (Label lbl in lstLabels)
            {
                lbl.ForeColor = Color.White ;
                lbl.BackColor = Color.Red;
            }
        }
    }
}
[C#] 改變 GroupBox 內 Label 的背景顏色

沒有留言:

張貼留言