質問: c# 仮想リストビュー お世話になります。 仮想リストビューで画像一覧を表示しているのですが、アイテムの選択状態を上手く取得できず困っています。 通常はitems.selectedimtesで取れるのですが、仮想リストビューだと例外になってしまいます。 そこでonitemselectionchangedで取得しようとしたのですが、何故か選択解除のタイミングでイベントが発生しません。仮想リストビューだからなのでしょうか。 とりあえず今はondrawitemで取得して変数に保存していますが、今度はスクロールで隠れた画像の選択解除が取得できません。 ですのでonitemselectionchangedでshiftキーとctrlキーの有無を見て、押されていなければ一度全てのアイテムが選択解除されたものとし、その後invalidate()とupdate()でondrawitemを呼び出しています。 ondrawitemで現在表示中の場所(クリックしたアイテム。この時は1つだけのはず)の選択状態が取れるので、とりあえずこれで目的の動作は果たしました。 ですがやり方がスマートでない上に、アイテムをクリックする度に画面を更新しているので見た目が悪いです。 何か良い方法は無いでしょうか?
回答: 仮想モードの場合 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] ]; } などといった具合にアクセスすればいいようです