[英]Remove item from Menu Strip
我在Windows窗體中有一個具有以下結構的菜單條,名為mstMain
:
我正在執行for
循環,以刪除Programs
(名為mnuPrograms
)中的所有項目,其中項目的數量為== 0
。 我的嘗試是:
for (int n = 0; n < mnuPrograms.MenuItems.Count; n++)
if (mnuPrograms.MenuItems[n].MenuItems.Count == 0)
mnuPrograms.MenuItems.Remove(mnuPrograms.MenuItems[n]);
而且它不會刪除正確的項目。 我也用過foreach
:
foreach (
MenuItem item in
mnuPrograms.MenuItems.Cast<MenuItem>().Where(item => item.MenuItems.Count == 0))
mnuPrograms.MenuItems.Remove(item);
但是在這種情況下,我收到InvalidOperationException
。 我該如何執行呢?
您正在遍歷列表時對其進行修改。
而且pid是正確的,您可以禁用一個項目而不是刪除它。
從可用性的角度來看,您可能希望禁用這些項目。 用戶希望看到他們不能做某事。 通過刪除它們,他們可能會感到困惑。 禁用項目后,您的問題可能已經解決。
編輯:
您也有一個錯誤的假設,表示存在更深的誤解。 您正在做兩件事:
您不應同時執行這兩種操作,因為如果您沒有枚舉所依據的不變集,則終止條件將變得不可預測(在某些情況下,NP會不完整)。 這就是為什么如果您修改塊內的枚舉集,則foreach
將引發異常的原因。
為了避免這種情況,您應該僅在不刪除時增加它,但那一刻while()
更優雅,就像這樣:
while (i < list.Count)
{
// do stuff with list[i]
if (removal_condition) // only do one of these, never both
{
list.RemoveAt(i);
}
else
{
i++;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.