如何处理 C# 中的菜单项以传递值

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为全局变量,但我有很多这样的变量。如果我采用这种方法,变量将一直存在,直到表单被处理。所以这行不通。有没有另一种方法来实现这一目标?

jtd*_*ubs 5

一种选择:

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)