获取没有foreach循环的特定Tag的ToolStripMenuItem.DropDownItems索引

时间:2014-03-19 10:07:23

标签: c# indexof

有没有办法在不使用foreach循环的情况下为集合中具有特定标记的项目获取ToolStripMenuItem.DropDownItems的索引?

我目前正在这样做:

private void button1_Click(object sender, EventArgs e)
{
    Form2 myForm2 = new Form2();
    myForm2.OnTemplateUpdated += new Form2.TemplateUpdatedHandler(myForm2_OnTemplateUpdated);
    myForm2.Show();
}

void myForm2_OnTemplateUpdated(Form s, TemplateUpdatedEvent e)
{
    int index = 0;
    foreach (ToolStripMenuItem myMenuItem in templatesToolStripMenuItem.DropDownItems)
    {
        if ((string)myMenuItem.Tag == e.TemplateId)
        {
            templatesToolStripMenuItem.DropDownItems[index].Text = e.NewName;
            break;
        }
        index++;
    }
}

我知道templatesToolStripMenuItem.DropDownItemsIndexOf()方法,但我没有运气试图像这样使用它:

int menuItemIndex = templatesToolStripMenuItem.DropDownItems
    .IndexOf(new ToolStripMenuItem() { Tag = e.TemplateId });

menuItemIndex总是-1 ...也许我使用的方法不正确?

1 个答案:

答案 0 :(得分:1)

您可以为DropDownItems中与Tag对应的项目指定名称。例如:

templatesToolStripMenuItem.DropDownItems.Add(new ToolStripMenuItem("Item text") { Tag = 1, Name = "item1" });

因此,您可以按如下方式获得所需的项目:

templatesToolStripMenuItem.DropDownItems["item" + e.TemplateId].Text = e.NewName;