• 締切済み

リストビューの画面表示部分

リストビューの選択によってsubitemの文字の色を変えることになりました。 問題はリストビューの件数で数万件のデータがあります。 そこでリストの画面表示部分を知りたいのです。 例えば1000件のリスト中、画面に表示されているのは20件目から12件であるという具合に。 この20件目から12件という情報は取得することができるのでしょうか? あるいは数万件といえどパソコン上では瞬間だから、 そんなこと気にせずに全リストをループさせても良いものでしょうか? 設計上、どのようにしたら良いか悩んでいます。 ちなみにマシンはCore2Duo以降を念頭に考えて下さい。

みんなの回答

回答No.1

環境がわかりません。.NET/2005/2008のいずれかと仮定して・・・。 ListView1.TopItemプロパティで、リストに表示されている先頭のアイテムを取得することができます。表示されている項目数については見つかりませんでしたが、リストであればコントロールサイズからある程度算出できるかと。 > あるいは数万件といえどパソコン上では瞬間だから 実際に動かしてみないとわかりませんが、選択された項目のみに処理を施すならSelectedIndexChangedイベントを活用するのがよいかと。 > 設計上、どのようにしたら良いか悩んでいます 件数が多すぎて処理に時間がかかるようなら、仮想モード(.NET 2.0以降)を使うことで負荷を軽減することができると思います。私も実際に仮想モードを使ったことはないので詳しくは説明できませんが・・・。

yasyatengu
質問者

お礼

ご回答ありがとうございます。 色々調べて頂いたようで恐縮です。 コントロールの遷移の関係からSelectedIndexchangedイベントは回避しております。 TopItemプロパティというものがあるのですね。 これを基準に30ほど回すというのが、根拠のない落としどころになるかもしれません。 件数が多すぎても処理に時間がかからないことは分かっています。 ただ、3万件などのデータに対してわずか3~4件の対象で 全件まわすのも無駄といえば無駄、美しくないと思った次第です。

yasyatengu
質問者

補足

SetwindowPosというAPIでウィンドウ内(リストボックス内)の スクロール位置を知ることができるようです。 今回はこちらで開発する運びになりました。

関連するQ&A