【问题标题】:How to add a dictionary to a ContextMenuStrip如何将字典添加到 ContextMenuStrip
【发布时间】: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 遍后想要什么 :(
  • 一种方法是将ToolStripItemTag 属性设置为Key 的值。事件处理程序将引用被单击的项目(发送者),您可以从 Tag 属性中获取键值。
  • 如何设置标签属性?
  • 当您循环访问Dictionary 并创建ToolStripMenuItems 时,在您设置TextImage 属性的位置设置Tag = keyValuePair.Key
  • @ChrisDunaway 这看起来不错,但我现在只遇到了添加点击事件的问题。 statusMenu[StatusMenu.Values.Count - 1].Click += new EventHandler(MenuOption_Click_Handler)。有什么想法吗?

标签: c# winforms dictionary contextmenu


【解决方案1】:

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

这是一个想法。您使用前缀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));
}

【讨论】:

  • 这是个好主意,我现在只是坚持将点击事件动态添加到每个状态。 stausMenu[statusMenu.Values.Count-1].Click += new EventHandler(MenuOption_Click_Handler)。我假设我遇到的错误是我在字典中遗漏了一些东西,但我不确定语法。感谢您的帮助
  • System.Collections.Generic.KeyNotFoundException: '给定的键不在字典中。'我相信它必须处理我的字典类型为 并且我的索引做错了。
  • 非常感谢,现在可以了。在我接受这个答案之前,你能解释一下为什么我需要初始化一个新的工具条菜单变量而不是我最初的想法吗?
  • 我不太懂你的代码。我遵循我的方法,对象的所有属性应该同时初始化并稍后添加。我认为你不好操纵你的字典。就这些。调试查找下来
猜你喜欢
  • 2013-11-28
  • 2010-09-21
  • 2018-08-14
  • 2021-10-12
  • 2016-06-15
  • 2014-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多