巨大なリスト項目でlistviewのすべての項目をチェックしますか?

listview の3000項目について調べたいと思います。これは少しのコードです:

foreach (ListViewItem item in this.lvItem.Items)
{
    item.Checked = !item.Checked;
}

しかし、項目がチェックされていると、リストビューは非常に遅いです。この問題を解決するためのアイデアを教えてください。ありがとう。

1
私の考え:リストビューに3000アイテムが必要なのはなぜですか?私は誰もそれを通過し、1つ1つチェックしないと思う。彼らはよくまとまって整理されるべきです。
追加された 著者 Danny Chen,

5 答え

私は同じ問題を抱えていたが、なぜそれが見つかった。

リストビューに「ItemChecked」イベントハンドラが添付されていました。

私はeventHandlerを削除し、私の問題を解決しました。 「ItemChecked」イベントハンドラを削除し、速度が良いかどうか確認してください。

1
追加された

このようなものはあなたのために働くでしょうか? ...チェックすると、項目を辞書に追加します。チェックを外すと、辞書から削除されます。テストされたコードではありませんが、あなたがこのようなことをすることができるかどうか不思議です

Dictionary Dic = listView.Items 
    .Cast() 
    .ToDictionary(x => x.Text, x => x.SubItems[0].Checked); 

あなたはそれについてもっとうまくいく方法を尋ねました。私が言っていることは、あなたのチェック・イベントにあなたのリスト・ビューにアイテムを追加したいということです。私は、ユーザーが実際にすべての3000をチェックするのではないかと疑うので、あなたがチェックしたアイテムをどのように扱いたいかを決めるコードを変更してください。おなじみではない場合は、あなたが実際に必要としていること、あるいは望むことを反映するために質問を変更してください...

0
追加された

大規模なリスト項目の場合、forループはforeachループより速く動作するという噂が聞こえました お試しください

for(int i = 0; i = < this.1vItem.Items.Count; i++)
{
//Stuff
}
0
追加された

私はまた、ユーザーが3000アイテムをクリックすることを期待するのは賢明ではないと思います。しかし、私が最近行ったことは、アイテムを追加するときに、多くのアイテムが存在しないことを知って、チェックする必要があるということを知っているときに、アイテムをリストに追加する前に

このようなもの:

foreach (Recipient recipient in recipients)
{
    var item = new ListViewItem(recipient.FirstName + " " + recipient.LastName);
    item.Tag = recipient;
    item.Checked = true;
    lvRicipients.Items.Add(item);
}
0
追加された
for (int i = 0; i <= listView1.Items.Count - 1; i++)
{
     if (!listView1.Items[i].Checked)
     listView1.Items[i].Checked = true;
}
0
追加された