ASD*_*ASD 2 c# contextmenu menuitem winforms
我在 C# 中的 Windows 窗体中工作。我有一个方法,我将MenuItems添加到 s 中,ContextMenu并为MenuItems实现了事件处理程序,如下所示:
public void Form1_Load()
{
int index = 0;
ArrayList ar = new ArrayList();
ContextMenu cm = new ContextMenu();
cm.Name = "Test";
MenuItem mi = new MenuItem("All");
mi.Click += new EventHandler(mi_All);
}
private void mi_All(object sender, EventArgs e)
{
// Here I want to access the arraylist and integer specified in above method
}
Run Code Online (Sandbox Code Playgroud)
如何才能做到这一点?一种可能的解决方案是将ArrayList和声明int为全局变量,但我有很多这样的变量。如果我采用这种方法,变量将一直存在,直到表单被处理。所以这行不通。有没有另一种方法来实现这一目标?
一种选择:
mi.Click += delegate (object sender, EventArgs e) { mi_All(sender, e, ar, index); };
...
private void mi_All(object sender, EventArgs e, ArrayList ar, int index)
{
...
}
Run Code Online (Sandbox Code Playgroud)
其他:
mi.Tag = new object[] { ar, index };
...
private void mi_All(object sender, EventArgs e)
{
ArrayList ar = (ArrayList)((object[])((MenuItem)sender).Tag)[0];
int index = (int)((object[])((MenuItem)sender).Tag)[1];
...
}
Run Code Online (Sandbox Code Playgroud)