我有一个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次,依此类推。
答案 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);
}
第二种方式搜索实际文本。