c# - 如何将字典添加到 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, Status1]}
{[2, Status2]}
{[5, Status3]}
因此,如果我加载上下文菜单,如果我单击 Status3,我需要传递给单击状态键 5 的 ClickEvent。现在它只检测值(Status3)。任何帮助深表感谢!
解决方案
为什么不重命名工具提示控件?id 是 的键Dictionary
,所以它应该是不同的。无论如何,任何控件都必须有名称。
这是一个想法。您使用前缀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));
}
推荐阅读
- azure-active-directory - 图形 API 架构扩展不适用于用户动态组过滤器
- c++ - 如何在 Poco 中设置单个线程名称,以便在内核跟踪/ps/gdb 中进行调试?
- feathersjs - 为什么feathersjs app.setup方法会破坏websocket连接
- ansible - 使用变量时的 Ansible
- python - 如何在特定区域之外更改图像颜色
- javascript - 正则表达式删除嵌套的多行注释
- java - 在运行时访问 jar 中的库资源
- java - 在将本地设备时间与基于英国的服务器时间进行比较时处理不同的时区
- c# - 并发 Web api 请求以及如何处理 ASP.NET 核心中的状态
- c# - 如何使用凭据从另一台计算机读取文本