动态添加上下文菜单项
Dynamically adding Context Menu items
出于某种原因,无论将 toolstripmenuitem 添加到上下文菜单多少次,它总是说上下文菜单不包含该项目。
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);
}
}
您正在创建一个新的菜单项并正在搜索它。但由于它是刚刚创建的,它显然不可能已经在菜单中。这就是为什么你永远找不到它的原因。之前可能已经添加了具有该文本的 不同 菜单项,但您的代码并未查找该文本。
您需要在菜单项中搜索包含该文本的项目。代码可以通过其他方式稍微简化一下:
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);
}
除了 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");
}
}
出于某种原因,无论将 toolstripmenuitem 添加到上下文菜单多少次,它总是说上下文菜单不包含该项目。
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);
}
}
您正在创建一个新的菜单项并正在搜索它。但由于它是刚刚创建的,它显然不可能已经在菜单中。这就是为什么你永远找不到它的原因。之前可能已经添加了具有该文本的 不同 菜单项,但您的代码并未查找该文本。
您需要在菜单项中搜索包含该文本的项目。代码可以通过其他方式稍微简化一下:
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);
}
除了 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");
}
}