首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

100个旋钮按下后改变颜色

2012-06-21 
100个按钮按下后改变颜色现在我有这样一个需求,我的程序有100个按钮,代表100件货物,每个按钮按下后会改变

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;        } 

热点排行