将事件添加到代码创建的对象

时间:2014-10-04 12:00:31

标签: c# arrays events

我正在使用代码创建一个2D按钮数组,我想添加一个button_click()方法。 除了2个通常的参数(对象发送者,EventArgs e)之外,我想要另外输入两个变量,以确定单击了哪个按钮,并做了其他事情。

我目前正在做这个

 arr[i,j].Click+= new EventHandler(button_click);
 public void button_click(object sender, EventArgs e)

是否有另一种添加事件的方式可以让我做我想做的事情?

并且单独注意。有没有使用按钮创建具有特定颜色的立方体的简单方法?

2 个答案:

答案 0 :(得分:1)

  

确定点击了哪个按钮,然后执行其他操作。

您可以使用sender参数来识别点击的按钮。

如果您不想引入具有ij属性的自定义按钮类型,则可以使用Tag属性来存储索引。

答案 1 :(得分:0)

创建一个继承自button类的类。并为其添加2 properties。然后访问表单中的这些属性。以下示例是解决问题的一种方法。

public class ButtonCtrl : Button
{
    public ButtonCtrl(int _arg1, int _arg2)
    {
        Arg1 = _arg1;
        Arg2 = _arg2;
    }

    public int Arg1 { get; set; }
    public int Arg2 { get; set; }         
}

//create buttons in form c'tor

    public Form1()
    {
        InitializeComponent();

        ButtonCtrl button1 = new ButtonCtrl(1,2);
        button1.Text = "dynamic 1";
        button1.Click += new EventHandler(button_click);
        button1.Top = 10;
        this.Controls.Add(button1);

        ButtonCtrl button2 = new ButtonCtrl(3, 4);
        button2.Text = "dynamic 2";
        button2.Click += new EventHandler(button_click);
        button2.Top = 30;
        this.Controls.Add(button2);

    }

事件处理程序

    public void button_click(object sender,EventArgs e)
    {
        if(sender is ButtonCtrl)
        {
            ButtonCtrl btnCtrl= sender as ButtonCtrl;
            label1.Text = btnCtrl.Arg1.ToString() + " " + btnCtrl.Arg2.ToString();
        }
    }