【发布时间】:2018-07-18 21:12:09
【问题描述】:
我目前正在尝试将状态值字典添加到上下文菜单中。我遇到的主要问题是如何将所选字典项的键值传递给单击事件。
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, 状态3]}
所以如果我加载上下文菜单,如果我点击 Status3,我需要将状态键 5 被点击的 ClickEvent 传递给。现在它只检测值(Status3)。非常感谢任何帮助!
【问题讨论】:
-
对不起,我真的不明白你读了 10 遍后想要什么 :(
-
一种方法是将
ToolStripItem的Tag属性设置为Key 的值。事件处理程序将引用被单击的项目(发送者),您可以从Tag属性中获取键值。 -
如何设置标签属性?
-
当您循环访问
Dictionary并创建ToolStripMenuItems 时,在您设置Text和Image属性的位置设置Tag = keyValuePair.Key。 -
@ChrisDunaway 这看起来不错,但我现在只遇到了添加点击事件的问题。 statusMenu[StatusMenu.Values.Count - 1].Click += new EventHandler(MenuOption_Click_Handler)。有什么想法吗?
标签: c# winforms dictionary contextmenu