我如何检查ToolStripMenuItem.DropDownItems中是否已存在?

时间:2015-06-01 11:59:48

标签: c# .net winforms

我有一个ToolStripMenuItem MouseEnter事件:

private void recentFilesToolStripMenuItem_MouseEnter(object sender, EventArgs e)
{
    for (int i = 0; i < lines.Length; i++)
    {
        ToolStripMenuItem s = new ToolStripMenuItem(lines[i]);
            if (!recentFilesToolStripMenuItem.DropDownItems.ContainsKey(lines[i]))
            recentFilesToolStripMenuItem.DropDownItems.Add(s);

    }            
}

现在我正在使用ContainsKey,但之前我只使用了Contains(s) 在这两种情况下,它都会不断地将项目添加到DropDownItems中。 每次我移动鼠标并按Enter键,我会再次看到添加的项目。 在这种情况下,lines是包含路径和文本文件名称的字符串数组。

例如,在索引0行中,我看到:d:\mytext.txt

问题是,当我用鼠标输入并且我希望它们只添加一次时,它会继续添加它们。

我第一次看到用鼠标进入时:

d:\mytext.txt
e:\test.txt
c:\hello\hellowowrld.txt

下次当我用鼠标进入时,我看到它两次:

d:\mytext.txt
e:\test.txt
c:\hello\hellowowrld.txt
d:\mytext.txt
e:\test.txt
c:\hello\hellowowrld.txt

然后下次我看到相同的项目9次,依此类推。

1 个答案:

答案 0 :(得分:2)

有两种方法可以做到这一点。

一,是你创建了这样的ToolStripMenuItem

new ToolStripMenuItem(lines[i], (Image)null, (EventHandler)null, lines[i]);

第四个参数是&#34;键&#34;对于.ContainsKey(...),不是第一个参数。

二,你可以这样做:

if (!recentFilesToolStripMenuItem.DropDownItems
        .Cast<ToolStripMenuItem>()
        .Any(x => x.Text == lines[i]))
{
    recentFilesToolStripMenuItem.DropDownItems.Add(s);
}

第二种方式搜索实际文本。