我在C#中使用Windows Forms。我有一种方法可以将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
声明为全局变量,但我有很多这样的变量。如果采用这种方法,变量将一直存在,直到表格被处理掉。所以这不起作用。有没有其他方法可以实现这个目标?
答案 0 :(得分:4)
MenuItem
具有Tag
属性,可用于分配您喜欢的任何自定义信息。因此,在调用事件处理程序时,请分配给您需要访问的内容。在您的示例中,您将分配enu项的整数索引,然后在事件处理程序内使用它作为Form级别ArrayList字段的索引。
答案 1 :(得分:4)
一个选项:
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];
...
}