C# ToolStripMenuItem.DropDownList通过字符串查询赢得';我什么也不退

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

我有一个WinForms应用程序,它有
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