这是我创建按钮并将事件附加到他们的代码。
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
有人帮助我了!
答案 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;