出于某种原因,无论tooltripmenuitem添加到上下文菜单的次数多少,它总是说上下文菜单不包含该项。
ToolStripMenuItem Colour = new ToolStripMenuItem("Colour");
ctmFile.Show(Cursor.Position);
Selecteditem = lvFiles.FocusedItem.Text.ToString();
if (lvFiles.FocusedItem.ImageKey.ToString() == "Folder")
{
if (ctmFile.Items.Contains(Colour) == false)
{
ctmFile.Items.Add(Colour);
}
}
else
{
if(ctmFile.Items.Contains(Colour))
{
ctmFile.Items.Remove(Colour);
}
}
答案 0 :(得分:3)
您正在创建一个新菜单项并进行搜索。但由于它刚刚创建,它显然不能在菜单中。这就是为什么你永远不会在那里找到它。可能之前添加了带有该文本的不同的菜单项,但您的代码并未查找该代码。
您需要在菜单项中搜索包含该文本的项目。代码可以通过其他方式简化:
var colorItemText = "Colour";
var colorMenuItem = ctmFile.Items.Cast<ToolStripMenuItem>()
.FirstOrDefault(mi => mi.Text == colorItemText);
if (lvFiles.FocusedItem.ImageKey.ToString() == "Folder")
{
// Create and add if not already present
if (colorMenuItem == null)
{
colorMenuItem = new ToolStripMenuItem(colorItemText);
ctmFile.Items.Add(colorMenuItem);
}
}
else if (colorMenuItem != null)
{
// Remove if already present.
ctmFile.Items.Remove(colorMenuItem);
}
答案 1 :(得分:3)
为了补充Ed的答案,我建议改用密钥:
ctmFile.Show(Cursor.Position);
Selecteditem = lvFiles.FocusedItem.Text.ToString();
if (lvFiles.FocusedItem.ImageKey.ToString() == "Folder")
{
if (!ctmFile.Items.ContainsKey("Colour"))
{
ToolStripMenuItem Colour = new ToolStripMenuItem("Colour");
Colour.Name= "Colour"; //Add a name (key) to your menu.
ctmFile.Items.Add(Colour);
}
}
else
{
if (ctmFile.Items.ContainsKey("Colour"))
{
ctmFile.Items.RemoveByKey("Colour");
}
}