C#动态生成单个事件处理程序的按钮

时间:2016-12-04 05:55:20

标签: c# winforms

我需要为多个按钮使用单个事件处理程序。我根据数据库查询通过while循环生成了这些按钮。我创建了一个方法

void MyButtonClick(object sender, EventArgs e)
{ 
}

我是C#的新手。如何将所有按钮的事件绑定到单个处理程序。

生成按钮的代码:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {         
        try
        {
            MydbConnection db = new MydbConnection();
            MySqlConnection con = db.connection();
            MySqlCommand cmd = new MySqlCommand();

            cmd.CommandText = "select * from categories where online = 1";
            cmd.Connection = con;

            MySqlDataReader rd;
            con.Open();
            rd = cmd.ExecuteReader();

            int i = 1;
            while (rd.Read())
            {
                Button btn = new Button();
                btn.Name = "btn-" + i.ToString();
                btn.Tag = i;
                btn.Text = rd.GetString(2).ToString();

                btn.Height = 60;
                btn.Width = 100;
                btn.Location = new Point(900, 60 * i + 10);

                this.Controls.Add(btn);
                i++;
            }
        }
        catch (Exception ex) 
        {
            MessageBox.Show(ex.Message);
        }
    }
}

2 个答案:

答案 0 :(得分:1)

欢迎来到SO。您可以在this.Controls.Add(btn);

之前添加此权限
btn.Click += MyButtonClick;

答案 1 :(得分:0)

您需要将所有CLICK属性设置为相同的事件处理程序:

btn.Click += new EventHandler(MyButtonClick);

这应该使得只要你点击任何按钮,MyButtonClick()就是触发的事件。当然,如果您需要确定单击WHICH按钮,那么您需要检查事件中的sender参数,其中'i'是您为循环中的按钮分配的数字值之一:< / p>

(if sender == btn-i) then ....