1

データベースの内容をうまく表示する仮想 ListView を Winforms に持っています。アイテムはデータベースに非同期に追加され、スクロールバーを一番下まで引くと表示されます。

ここで、非同期スレッドがデータベースに追加されるたびに、ListView も更新されるようにして、どのインデックスが一番下の行になるかを確認したいと思います。ListView オブジェクトを追加する前に、アイテムの高さとリストボックスの高さに基づいて、どのインデックスをトップ インデックスにするかを設定する ListBox でそれを行うことができました。

int numItems = listBox1.ClientSize.Height / listBox1.ItemHeight;
if (listBox1.TopIndex == listBox1.Items.Count - numItems - 1)
    listBox1.TopIndex = listBox1.Items.Count - numItems + 1;

残念ながら、ListView には ItemHeight も TopIndex も存在しません。

しかし、主な問題は次のとおりです。特定の範囲のインデックスを表示する必要があることを仮想 ListView に伝えるにはどうすればよいでしょうか。または、いくつかのインデックスが確実に表示されるようにするにはどうすればよいでしょうか。

4

1 に答える 1

3

プロパティを使用して、 (仮想モードかどうかに関係なく) でTopItem一番上に表示される項目を設定できます。ListView

listView1.TopItem = listView1.Items[itemIndex];//itemIndex is the index of the item 
//you want to make visible as the top item.
于 2013-09-04T11:08:22.867 に答える