单击具有附加argurment的按钮组的事件处理程序

时间:2016-12-24 05:03:31

标签: c# .net winforms c#-4.0 telerik

这是我创建按钮并将事件附加到他们的代码。

 for (int i = 0; i < NumberOfQuestion; i++)
     {
                Telerik.WinControls.UI.RadButton button = new Telerik.WinControls.UI.RadButton();
                // radButton1
                // 
                button.Anchor = AnchorStyles.None;
                button.Font = new Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Bold);
                button.Location = new Point(65 * i + 15, 10);
                button.Name = "btn_cauhoi" + (i + 1);
                button.Size = new Size(60, 35);
                button.TabIndex = 1 + i;
                button.Text = "Câu " + (i + 1);

                button.Click += (sender, e) => Button_Click(sender, e, (i + 1));

                // 

                panel_nut_cauhoi.Controls.Add(button);
      }


 private void Button_Click(object sender, EventArgs e, int questionIndex)
 {
        MessageBox.Show(questionIndex.ToString());
 }

当我点击每个按钮时,它只显示questionIndex = lastIndex + 1

有人帮助我了!

1 个答案:

答案 0 :(得分:2)

您不需要也无法将其他参数传递给事件处理程序。要使用索引,您可以使用以下任一选项:

选项1 - (首选)使用此DoSomething之类的void DoSomething(int index)方法封装您要执行的逻辑,并以此方式将事件处理程序分配给按钮:

var j = i + 1;
button.Click += (obj, ea) => {DoSomething(j);};
//If for any reason you want to call your `Button_Click`, you can do it this way:
//button.Click += (sender, e) => Button_Click(sender, e, (i + 1));

选项2 - 将索引设置为Tag的{​​{1}}属性,然后在事件处理程序中将发件人强制转换为Button并从{{{{}}取消装入索引1}} property:

Button

选项3 - 在Tag和事件处理程序中存储按钮,在列表中查找发件人索引:

var button = (RadButton)sender;
var index = (int) button.Tag;