5

checkedItemからシングルを削除する方法を知っていますcheckedlistbox。しかし今、チェックされたすべてのアイテムを一度に削除したいと思います。

私はこれを試しました:

foreach (var item in List_Frente.CheckedItems)
            {
                List_Frente.Items.Remove(item);
            }

しかし、おそらくご存知のように、「ワンクリックでList that this enumerator is bound to has been modified. An enumerator can only be used if the list does not change.すべてを削除するにはどうすればよいですか?」というエラーが表示されます。checkeditems

4

5 に答える 5

11

次のようなことができます。

foreach (var item in List_Frente.CheckedItems.OfType<string>().ToList())
{
    List_Frente.Items.Remove(item);
}

すべてを 1 行で書きたい場合は、次のようにします。

List_Frente.CheckedItems.OfType<string>().ToList().ForEach(List_Frente.Items.Remove);

もちろん、これはアイテムが同じタイプの場合にのみ機能します。しかし、まだ粗雑に見えます。

Edit-Explanation: ToList()新しいリストを作成するため、元の CheckedItems リストを変更できます。これは、列挙子が元のリストではなく、新しく作成されたリストを列挙するためです。OfType<string>()呼び出すものが必要なため、そこにあるだけですToList()

于 2013-01-29T19:40:40.753 に答える
4
while (checkedListBox.CheckedItems.Count > 0) {
   checkedListBox.Items.RemoveAt(checkedListBox.CheckedIndices[0]);
}
于 2015-05-30T20:11:45.000 に答える
2

これは、反復しているリストを変更するためです。これを防ぐには、for ステートメントを使用します。

for(var i=0; i<List_Frente.CheckedItems.Count; i++)
{
    ((IList)List_Frente.CheckedItems).Remove(List_Frente.CheckedItems[0]);
}

この MSDN 記事に記載されているように、 は-method を明示的にCheckedListBox.CheckedItemCollection実装しています。つまり、これを機能させるにはインスタンスをキャストする必要があります。IList.RemoveIList

于 2013-01-29T19:37:09.247 に答える
0

これは機能します。

object[] items = new object[checkedListBox.Items.Count];
checkedListBox.Items.CopyTo(items, 0);
checkedListBox.Items.Clear();
checkedListBox.Items.AddRange(items);

私は、より美しく、ハッキーの少ないソリューションで戻ってくることを目指しています。

于 2013-01-29T20:01:58.457 に答える