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

时间:2010-11-18 02:19:14

标签: c# winforms contextmenu menuitem

我在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
}

如何做到这一点?一种可能的解决方案是将ArrayListint声明为全局变量,但我有很多这样的变量。如果采用这种方法,变量将一直存在,直到表格被处理掉。所以这不起作用。有没有其他方法可以实现这个目标?

2 个答案:

答案 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];
    ...
}