现在我有这样一个需求,我的程序有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#有没有机制来精简这一需求。

解决方案 »

  1.   


    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);
    ...
      

  2.   

    把所有按你的click事件都挂到btnDm001_Click上,然后        private void btnDm001_Click(object sender, EventArgs e)
            {
                if (((Button)sender).ForeColor == Color.LightGray)
                {
                    ((Button)sender).ForeColor = Color.OrangeRed;
                }
                else
                {
                    ((Button)sender).ForeColor = Color.LightGray;
                }
            }
      

  3.   

    所有的按钮用同一个Click事件不就行了,只写一次!
      

  4.   

    不用呀,你继承个button,重写下按下事件,在这里换图片或颜色。
    然后所有地方都用这个button。
    这就是所谓的自定义控件的用法。
      

  5.   

    for(int i=0;i<100; i++)
    {}
      

  6.   


    全选所有button,在属性-事件里面挂载一次就可以了
      

  7.   

    //事件方法可以简化下
    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);
    }
      

  8.   

    只要写一个函数,每个按钮都绑定这个函数。
    如果你的按钮命名是有规律的,或者是统一放在一个容器里。可以用循环绑定。
    foreach (Control c in this.Controls)
    {
     if (c is Button)
      (c as Button).Click+=new EventHandler(btnDm_Click);
    }
      

  9.   

    重写一个ButtonEX吧,吧click时间重写一下,再引用这个ButtonEX。
    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;
            }     
        }
    }
      

  10.   

    假设你的100个按钮的Name为buttonDm001-buttonDm100,这样写:
    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;
    }
      

  11.   

    改下事件的方法名字,这样更好些:
    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;
    }