我目前正在尝试向状态菜单条添加状态值字典。我遇到的主要问题是如何将所选字典项的键值传递给click事件。
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()));
}
我可以轻松地获取字典值的数组。我只是想知道是否有可能单击上下文菜单中的状态以将Key传递给save方法?
例如,说statusList包含以下值:
{[1,Status1]}
{[2,Status2]}
{[5,Status3]}
因此,如果加载上下文菜单,则单击Status3,则需要将单击状态键5的事件传递给ClickEvent。现在,它仅检测值(Status3)。任何帮助深表感谢!
答案 0 :(得分:1)
为什么不重命名工具提示控件? 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));
}