質問 |
||
| 質問者: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 |
|
| この回答へのお礼 | ありがとうございました。 おかげさまで思った通りの動作になりました。 |