通过字符串的ToolStripMenuItem.DropDownList查询不会返回任何内容

时间:2017-10-25 11:27:35

标签: c# .net winforms

我的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
}

1 个答案:

答案 0 :(得分:0)

当您致电Add()时,您可以传入要显示的文字或项目本身。这就是为什么你的第一组测试失败而第二组测试失败的原因。

当您使用menuItem.DropDownItems.Add(name)时,您尚未对其进行命名,因此您尝试按名称查找失败。

当您使用menuItem.DropDownItems.Add(nameItem)时,您已添加了实际项目,并且该项目 已获得名称。