[英]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.