100个按钮按下后改变颜色
现在我有这样一个需求,我的程序有100个按钮,代表100件货物,每个按钮按下后会改变自身颜色。
但对于每一个按钮,都要写一次类似的过程:
private void btnDm001_Click(object sender, EventArgs e)
{
if (btnDm001.ForeColor == Color.LightGray)
{
btnDm001.ForeColor = Color.OrangeRed;
}
else
{
btnDm001.ForeColor = Color.LightGray;
}
}
那么100个按钮不就是要写100次?不知道C#有没有机制来精简这一需求。
[解决办法]
- C# code
private void btnDm_Click(object sender, EventArgs e) { Button btnDm = sender as Button;if(btnDm==null) return;if (btnDm.ForeColor == Color.LightGray) { btnDm.ForeColor = Color.OrangeRed; } else { btnDm.ForeColor = Color.LightGray; } }btnDm001.Click+=new EventHandler(btnDm_Click);btnDm002.Click+=new EventHandler(btnDm_Click);btnDm003.Click+=new EventHandler(btnDm_Click);...
[解决办法]
不用呀,你继承个button,重写下按下事件,在这里换图片或颜色。
然后所有地方都用这个button。
这就是所谓的自定义控件的用法。
[解决办法]
- C# code
//事件方法可以简化下private void btnDm001_Click(object sender, EventArgs e){ var btn = (Button)sender; btn.ForeColor = btn.ForeColor != Color.LightGray ? Color.LightGray : Color.OrangeRed;}// 用这段代码给 btnDm001 - btnDm100 的按钮绑定事件for (int i = 1; i <= 100; i++){ this.Controls.Find("btnDm" + i.ToString("D3"), false)[0].Click += new EventHandler(btnDm001_Click);}
[解决办法]
只要写一个函数,每个按钮都绑定这个函数。
如果你的按钮命名是有规律的,或者是统一放在一个容器里。可以用循环绑定。
foreach (Control c in this.Controls)
{
if (c is Button)
(c as Button).Click+=new EventHandler(btnDm_Click);
}
[解决办法]
假设你的100个按钮的Name为buttonDm001-buttonDm100,这样写:
- C# code
private void Form1_Load(object sender, EventArgs e) { for (int i = 1; i <= 100; i++) this.Controls["buttonDm" + i.ToString("D3")].Click += new EventHandler(Form1_Click); } void Form1_Click(object sender, EventArgs e) { Button btn = sender as Button; if (btn.ForeColor == Color.LightGray) btn.ForeColor = Color.OrangeRed; else btn.ForeColor = Color.LightGray; }