ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:masaota56 C# 仮想リストビュー
困り度:
  • 困っています
お世話になります。
仮想リストビューで画像一覧を表示しているのですが、アイテムの選択状態を上手く取得できず困っています。

通常はItems.SelectedImtesで取れるのですが、仮想リストビューだと例外になってしまいます。

そこでOnItemSelectionChangedで取得しようとしたのですが、何故か選択解除のタイミングでイベントが発生しません。仮想リストビューだからなのでしょうか。

とりあえず今はOnDrawItemで取得して変数に保存していますが、今度はスクロールで隠れた画像の選択解除が取得できません。
ですのでOnItemSelectionChangedでShiftキーとCtrlキーの有無を見て、押されていなければ一度全てのアイテムが選択解除されたものとし、その後Invalidate()とUpdate()でOnDrawItemを呼び出しています。
OnDrawItemで現在表示中の場所(クリックしたアイテム。この時は1つだけのはず)の選択状態が取れるので、とりあえずこれで目的の動作は果たしました。

ですがやり方がスマートでない上に、アイテムをクリックする度に画面を更新しているので見た目が悪いです。

何か良い方法は無いでしょうか?
質問投稿日時:08/04/15 23:17
質問番号:3952164
この質問に対する回答は締め切られました。

回答

良回答20pt

回答者:redfox63 仮想モードの場合
ListViewItemCollectionとSelectedIndexCollection型の変数を用意してこれを使ってアクセスするように思います

ListView.ListViewItemCollection myCol;
ListView.SelectedIndexCollection mySel;
Form_Loadなどのイベントで
myCol = new ListView.ListViewItemCollection( listView1 );
mySel = new ListView.SelectedIndexCollection( listView1 );
などと紐付けします

OnItemSelectionChangeで
if (mySel.Count > 0 ) {
  ListViewItem oItem = myCol[ mySel[0] ];
}
などといった具合にアクセスすればいいようです
種類:回答
どんな人:専門家
自信:自信あり
回答日時:08/04/16 18:30
回答番号:No.1
この回答へのお礼ありがとうございました。
おかげさまで思った通りの動作になりました。