技術論壇問題
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;
}
}
}
}
沒有留言:
張貼留言