我正在使用 C# 编写 Windows 窗体。我有一个方法,我将 MenuItem
添加到 ContextMenu
并实现了 MenuItem
的事件处理程序,如下所示:
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
}
如何做到这一点?一种可能的解决方案是将 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)
{
...
}
另一个:
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];
...
}
关于c# - 如何处理 C# 中的菜单项以传递值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4211074/