0

仮想モードのときに ListView を列挙する方法は?

メソッドを使用OfType<>()してリスト ビュー アイテムを列挙しています。ただし、仮想モードの場合、リストビューを列挙できないなどの例外がスローされます。

これが私のコードです

List<String> lst= myListView.Items.OfType<ListViewItem>().Select(X=>X.Text).ToList(); 

では、仮想モードのときに ListView からアイテムを取得するにはどうすればよいですか?

.OfType<> の使用方法を投稿してください

前もって感謝します

4

2 に答える 2

2

仮想モードの場合、項目がリスト ビューにないため、リスト ビューから項目を取得できません。それが仮想モードの要点です。

代わりに、アイテムを保持すると、リスト ビューはアイテムを表示するために必要な情報を要求します。仮想モードでリスト ビューを正常に操作している場合は、ほとんどの場合、既にどこかにリスト内のアイテムが存在します。

ドキュメントからの引用:

VirtualMode プロパティを true に設定すると、ListView が仮想モードになります。仮想モードでは、通常の Items コレクションは使用されません。代わりに、ListView が必要とするため、ListViewItem オブジェクトが動的に作成されます。

仮想モードは、多くの状況で役立ちます。既にメモリ内にある非常に大きなコレクションから ListView オブジェクトを作成する必要がある場合、エントリごとに ListViewItem オブジェクトを作成するのは無駄になる可能性があります。仮想モードでは、必要なアイテムのみが作成されます。それ以外の場合は、ListViewItem オブジェクトの値を頻繁に再計算する必要があり、コレクション全体に対してこれを行うと、許容できないパフォーマンスが発生します。仮想モードでは、必要なアイテムのみが計算されます。

于 2011-05-12T15:05:56.567 に答える
0

リストが仮想モードのListViewItemCollection.GetEnumerator()ときに呼び出されると、メソッドは例外をスローします。これは、を含むLINQメソッドを介してそれらにアクセスすることが不可能になることを意味しますOfType()

ただし、リストの単純な反復を行うことができます。

List<string> lst = new List<string>();
for (int i = 0; i < listView1.VirtualListSize; i++) {
   lst.Add(listView1.Items[i].Text);

ただし、(繰り返しになりますが)リストが仮想の場合は、おそらく多数のアイテムが含まれているため、これにはしばらく時間がかかる可能性があります:)

于 2011-05-13T12:46:39.410 に答える