C# ToolStripMenuItem.DropDownList通过字符串查询赢得';我什么也不退
我有一个WinForms应用程序,它有C# ToolStripMenuItem.DropDownList通过字符串查询赢得';我什么也不退,c#,.net,winforms,C#,.net,Winforms,我有一个WinForms应用程序,它有MenuStrip,带有单个项ToolStripMenuItem menuItem,这些项是通过MSVC的设计器添加的 在代码中,我将新项目添加到menuItem中,然后尝试在它的DropDownItems集合中找到它。我尝试了几种方法,但没有一种能成功找到最近添加的项目 public Form1() { InitializeComponent(); string name = "Name"; var nameItem = new
MenuStrip
,带有单个项ToolStripMenuItem menuItem
,这些项是通过MSVC的设计器添加的
在代码中,我将新项目添加到menuItem
中,然后尝试在它的DropDownItems
集合中找到它。我尝试了几种方法,但没有一种能成功找到最近添加的项目
public Form1()
{
InitializeComponent();
string name = "Name";
var nameItem = new ToolStripMenuItem(name);
menuItem.DropDownItems.Add(name);
menuItem.DropDownItems.Add(nameItem);
// query via string doesn't work
Debug.Assert(menuItem.DropDownItems[name] != null); // fails
Debug.Assert(menuItem.DropDownItems.ContainsKey(name)); // fails
Debug.Assert(menuItem.DropDownItems.Find(name, false).Length > 0); // fails
Debug.Assert(menuItem.DropDownItems.IndexOfKey(name) >= 0); // fails
// query via reference does
Debug.Assert(menuItem.DropDownItems.Contains(nameItem)); // passes
Debug.Assert(menuItem.DropDownItems.IndexOf(nameItem) >= 0); // passes
}
调用Add()
时,可以传入要显示的文本,也可以传入项目本身。这就是为什么第一组测试失败,而第二组测试有效的原因
使用menuItem.DropDownItems.Add(name)
时,您尚未对其命名,因此按名称查找的尝试失败
使用menuItem.DropDownItems.Add(nameItem)
时,您已经添加了实际的项目,并且该项目被赋予了一个名称。调用Add()
时,您可以传入要显示的文本,也可以传入项目本身。这就是为什么第一组测试失败,而第二组测试有效的原因
使用menuItem.DropDownItems.Add(name)
时,您尚未对其命名,因此按名称查找的尝试失败
使用
menuItem.DropDownItems.Add(nameItem)
时,您已经添加了实际的项目,并且该项目被赋予了一个名称。您提供的是项目的文本,而不是其名称。如何:menuItem.DropDownItems.Add(“要显示的文本”).Name=Name
。您提供的是项目的文本,而不是其名称。这个怎么样:menuItem.DropDownItems.Add(“要显示的文本”).Name=Name
。