[英]C# .net How do I remove a string item from a context menu strip
我正在尝试从上下文菜单条中删除带有字符串“服务器列表”的项目,但是 function Remove() 不采用带有“ToolStripItem 值”的字符串。 我还尝试将上下文菜单条转换为数组和列表,但这些东西也不起作用。 抱歉,如果我很愚蠢,但我有点卡住了。
这是我的代码
if (!MenuStrip.Items.ToString().Contains("Server List"))
{
// it comes up with the error CS1503 and won't
// compile: cannot convert from string to System.Windows.Forms.ToolStripItem
MenuStrip.Items.Remove("Server List");
}
没有看到您的代码的 rest,感觉就像您缺少 MenuStrip 声明。 然后,使用变量
var menuStrip = new MenuStrip();
// or MunuStrip menuStrip = new MenuStrip();
if (!menuStrip.Items.ToString().Contains("Server List"))
{
// it comes up with the error CS1503 and won't
// compile: cannot convert from string to System.Windows.Forms.ToolStripItem
menuStrip.Items.Remove("Server List");
}
Items 不是字符串列表,而是“ToolStripItem”列表。
这意味着第二行(删除)将无法编译。
这也意味着“if”将无法按预期工作,因为列表的 ToString 将为您提供类似“System.Collections.Generic.List`1[System.Int32]”的列表<int>,因此您永远找不到其中的一个值。
假设值“服务器列表”在“文本”属性中,代码如下:
if (menuStrip.Items.Any(i => i.Text == "Server List"))
{
menuStrip.Items.Remove(menuStrip.Items.First(i => i.Text == "Server List"));
}
该代码将起作用,但不是最佳的,因为它将搜索包含“服务器列表”的项目两次(一次在 Any 期间,一次在 First 期间)。
最好的选择是:
var serverListToolStripItem = menuStrip.Items.FirstOrDefault(i => i.Text == "Server List")
if (serverListToolStripItem != null)
{
menuStrip.Items.Remove(serverListToolStripItem);
}
@arcord 接受的答案通常会起作用,在这种情况下可能永远不会失败,但确实包含 Linq 语句中的常见错误。 当.SingleOrDefault() 更正确时,经常使用.FirstOrDefault() 的使用。 如果有两个或更多实例的值为“服务器列表”,则仅删除返回的第一个实例。 留下其他实例。 这可能是也可能不是预期的结果。 使用 .SingleOrDefault() 将引发可以适当处理的异常。 检查此: LINQ:何时使用 SingleOrDefault 与 FirstOrDefault() 与过滤条件
原来我以前搞砸了,现在我有了这个解决方案,可以在上下文菜单条中添加和删除项目。
List<string> items = new List<string>();
foreach (object obj in MenuStrip.Items)
{
items.Add(obj.ToString());
}
// items.Add(string);
// items.Remove(string);
MenuStrip.Items.Clear();
foreach (string item in items)
{
MenuStrip.Items.Add(item);
}
此外,要确定单击了哪个项目,您可以在单击上下文菜单项时创建一个事件,然后获取该项目
private void MenuStrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
if (e.ClickedItem.ToString() == "Server List")
{
// code
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.