我正在尝试将事件绑定到在for循环中创建的动态创建的菜单项的click事件。当我单击菜单项时,代码将执行,但循环中的最后一个值为“ x”。这是代码:
for(int x = 1; x < 3; x++)
{
MenuItem mi = new MenuItem("Get");
ContextMenu cm = new ContextMenu();
mi.Click += (s, e) => { GetClick(x); };
cm.MenuItems.Add(mi);
Button btn = this.Controls.Find("btnGet" + x.ToString(), true).FirstOrDefault() as Button;
btn.ContextMenu = cm;
}
private void GetClick(int intGetItem)
{
//Previous code...
GetItem(intGetItem);
}
问题是当我调试GetClick方法时,无论我使用哪个按钮,intGetItem始终等于3。任何帮助表示赞赏!
答案 0 :(得分:2)
您需要将x分配给局部变量,并在表达式中使用它:
var y = x;
mi.Click += (s, e) => { GetClick(y); };
答案 1 :(得分:0)
注册事件时,无法定义事件的参数。相反,您应该传递菜单项将提供的参数。
mi.Click += GetClick;
并更改您的事件以获取标准的Click参数:
private void GetClick(object sender, EventArgs e)
{
if (sender == menu1) {...