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

标签 c# winforms contextmenu menuitem

我正在使用 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
}

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

最佳答案

一个选项:

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/

相关文章:

c# - 如何使用 SoundPlayer 淡出 .wav 文件的音频而不是立即停止?

c# - 是否可以像 WebView 一样在 Windows 窗体中嵌入 Gecko 或 Webkit?

javascript - 如何将项目添加到 Adob​​e Flash 上下文菜单?

c# - 如何忽略 [XMLIgnore] 属性

c# - 通过 C# Action 手动将 SASS 编译为 CSS 以实现可自定义的前端布局

c# - 获取位图的某个正方形区域

.net - My.Settings 不保存 ArrayList

.net - Graphics.DrawRectangle 在第二个屏幕上缺少边缘

java - 如何全局禁用默认上下文菜单

android - 如何为菜单项Android添加分线器