2012-03-07 4 views
0

スクロール中にlistviewで最初に表示されるアイテムのインデックスを取得する方法を教えてください。私はリストビューで100個のアイテムを持っていると言うと、それは小さすぎるので、ウィンドウに表示されるアイテムは5つしかないので、アイテムをスクロールし始め、リストビューでそれらの5つのアイテムの最初の(または任意の) 。スクロール時のリストビュー内の目に見えるアイテムのインデックス

ありがとうございました。

答えて

0

コントロールの最初の表示項目を返すTopItemプロパティがあります。

+1

ありがとうございましたが、例外が発生しました: "LargeIcon、SmallIcon、またはTileビューでトップアイテムを取得できません。" – Cembo

+0

このプロパティは、listboxがListまたはDetailsモードの場合にのみ有効です。この[リンク]を見てください(http://stackoverflow.com/questions/372011/how-do-i-get-the-start-index-and-number-of-visible-items-in-a-listview )、多分それは助けになるでしょう。 – ebutusov

+0

ListView1に画像のサムネイルがあります。 ListView1を設定している間、私はDoEvents()を介してすぐに呼び出される "listView1_SelectedIndexChanged"イベントの特定の項目を選択できます。問題はサムネイルがListView1にロードされている間に(サムネイルが画像の長さにかかることがあります)サムネイルをスクロールして特定の項目を選択しようとしていることです。しかし、私はスクロールバーをリリースした後、すぐに最初の項目にジャンプするので、私はインデックス50の例項目を選択することはできません。 "EnsureVisible"プロパティを使用しようとしましたが、特定の項目。 – Cembo

0

モードを[一覧]または[詳細]に表示するだけで済みます。この時点から、あなたが一番上のアイテムを取得することができ、その後、たとえばLargeIconのために、以前の表示モードに戻ってそれを変更します。

listview1.View = View.List; 
ListViewItem topitem = listview1.TopItem; 
listview1.View = View.LargeIcon; 
-1
public int firstVisible(ListView lv) 
    { 
     int i = 1; 
     try 
     { 
      while (lv.GetItemRect(i).X != 0) i++; 
     } 
     catch 
     { 
      return 0; 
     } 
     int rowWidth = i; 
     int rowHeight = lv.GetItemRect(i).Y - lv.GetItemRect(0).Y; 
     return -((int)lv.GetItemRect(0).Y/rowHeight) * rowWidth; 
    } 

これは、リストビューの最初の可視インデックスを返します。私はそれを壊すかもしれないものがあれば、私は何をしているのか分からない、それは私がやっているもののために働く。私はLargeIconsでテストしました。それについての良いことは、すべての項目を通過する必要はありません、それはちょうど最初の項目の位置からそれを把握します。

関連する問題