现在我有这样一个需求,我的程序有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#有没有机制来精简这一需求。
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#中如何获取一个网页里的元素如按钮,文本框等信息
- 2个空行替换成1个空行的正则表达式如何写
- 请问谁有C#调用COM的小例子,请发到我的邮箱:[email protected], 在线等,急,谢谢
- 转换成unicode编码
- 运输调度 均衡算法问题
- 我用尚俊杰的ASP。NET学习,里面是VB。NET写的,谁知道用C#版的ASP。NET的电子书籍
- 我在原窗体的基础上又新建了一个窗体,为和新建的那个窗体把Pocket pC2002下的输入法的那个任务栏给当住了,我没法选择输入法了??
- 求SQL语句,在线立结!
- 想做个判卷的程序
- C#中实现施工横道图,网络图,在线等高手!
- 求一个查询乱码的方法
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);
...
{
if (((Button)sender).ForeColor == Color.LightGray)
{
((Button)sender).ForeColor = Color.OrangeRed;
}
else
{
((Button)sender).ForeColor = Color.LightGray;
}
}
然后所有地方都用这个button。
这就是所谓的自定义控件的用法。
{}
全选所有button,在属性-事件里面挂载一次就可以了
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);
}
namespace TextBoxTest
{
public class ButtonEX : System.Windows.Forms.Button
{
protected override void OnClick(EventArgs e)
{
base.ForeColor = System.Drawing.Color.Red;
base.BackColor = System.Drawing.Color.LightYellow;
}
}
}
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;
}
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 1; i <= 100; i++)
this.Controls["buttonDm" + i.ToString("D3")].Click += new EventHandler(Button_Click);
} void Button_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
if (btn.ForeColor == Color.LightGray)
btn.ForeColor = Color.OrangeRed;
else
btn.ForeColor = Color.LightGray;
}