如何将字典添加到 ContextMenuStrip

How to add a dictionary to a ContextMenuStrip

我目前正在尝试将状态值字典添加到上下文菜单条中。我遇到的主要问题是如何将所选字典项的键值传递给点击事件。

Dictionary<int, string> statusList = getStatusList();

if (statusList.Count > 0)
{
    Dictionary<int, ToolStripItem> statusMenu = new Dictionary<int, ToolStripItem>();

    foreach (var keyValuePair in statusList)
    {
         statusMenu.Add(keyValuePair.Key, new ToolStripMenuItem() { Text = keyValuePair.Value.ToString(), Image = Resources.Refresh });
         //statusMenu[statusMenu.Count - 1, statusMenu].Click += new EventHandler(MenuOption_Click_Handler); This is where I am confused
    }
    datagridview1.ContextMenuStrip.Items.Add(new ToolStripMenuItem("Set Status to", Resources.Refresh, statusMenu.Values.ToArray()));
}

我可以很容易地得到字典值的数组。我只是想知道是否可以通过单击上下文菜单中的状态将密钥传递给保存方法?

因此,例如说 statusList 包含以下值:
{[1, 状态 1]}
{[2, 状态 2]}
{[5, Status3]}

因此,如果我加载上下文菜单,如果我单击 Status3,我需要将 Status Key 5 被单击的情况传递给 ClickEvent。现在它只检测值(Status3)。非常感谢任何帮助!

为什么不重命名工具提示控件? id是Dictionary的key,所以应该是distinct的。不管怎样,任何控件都必须有名称。

这是一个想法。您使用前缀 ToolStrip(或任何您喜欢的)+ Key 为控件命名,稍后再获取。喜欢:

var newItem= new ToolStripMenuItem() { 
Text = keyValuePair.Value.ToString(), 
Image = Resources.Refresh,
Name="ToolStrip" + keyValuePair.Key };

newItem.Click +=new EventHandler(MenuOption_Click_Handler);
statusMenu.Add(keyValuePair.Key,newItem);

MenuOption_Click_Handler方法中:

public void MenuOption_Click_Handler(object sender,EventArgs e)
{
    var id = Convert.ToInt32(((ToolStripMenuItem)sender).Name.Substring(0,9));
}