【问题标题】:Adding events to code-created objects向代码创建的对象添加事件
【发布时间】:2014-10-04 12:00:31
【问题描述】:

我正在使用代码创建一个二维按钮数组,并且我想添加一个 button_click() 方法。 除了 2 个常用参数(对象发送者、EventArgs e)之外,我还想获取另外 2 个变量作为输入,以识别单击了哪个按钮,然后执行其他操作。

我目前正在这样做

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

还有其他添加事件的方法可以让我做我想做的事吗?

另外说明。有没有不使用按钮创建具有某种颜色的立方体的简单方法?

【问题讨论】:

  • 发件人将是按钮。只需将 ti 转换为 Button 即可使用它。我不认为你可以在 Args 中有另一个变量。
  • @TaW 我猜 OP 需要从处理程序访问 ij,因此需要做一些工作才能使 sender 可用。
  • 好吧,你的答案提供了一种方法:将索引填充到结构或类中并将其放入按钮的标签中:arr[i,j].Tag = new Point(i,j); - 然后这将起作用:int j = ((Point)((Button)sender).Tag).Y;跨度>

标签: c# arrays events


【解决方案1】:

识别单击了哪个按钮,然后执行其他操作。

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

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

【讨论】:

    【解决方案2】:

    创建一个继承自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();
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-20
      • 1970-01-01
      • 2018-04-30
      • 1970-01-01
      • 2014-08-05
      • 1970-01-01
      相关资源
      最近更新 更多