• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C# 仮想リストビュー)

C#仮想リストビューでアイテムの選択状態を取得する方法について

このQ&Aのポイント
  • C#の仮想リストビューで画像一覧を表示している際に、アイテムの選択状態を取得する方法について困っています。
  • 通常のリストビューではItems.SelectedItemsで取得できますが、仮想リストビューでは例外が発生してしまいます。
  • 現在はOnDrawItemでアイテムの選択状態を取得していますが、アイテムをクリックする度に画面更新が必要で見た目が悪いです。他にスマートな方法はありますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.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] ]; } などといった具合にアクセスすればいいようです

masaota56
質問者

お礼

ありがとうございました。 おかげさまで思った通りの動作になりました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • リストビューコントロールのアイテム選択

    リストビューコントロールのViewプロパティを3lvw_Reportにしてクリックすると、アイテムが選択されますが、SubItem(1)など、サブアイテムが選択されたいないので、見た目がわるいです。 クリックしたときに全サブアイテムを横一直線に選択したいのです。 APIを使って何とかできそうな気がしたので調べたのですが、わかりませんでした。 どなたか教えてください。

  • リストビューのアイテム数

    リストビューの選択されているアイテム数の求め方はわかったのですが、全アイテム数の求め方が分かりません。ループさせないと求められないのでしょうか?

  • リストビューのスクロール

    お世話様です。 C#.NET(1.1)でプログラミングしています。 リストビューですが以下の設定を行っています。 CheckedBox=true View=List MultiSelect=true Scrollable=true ※カラム関係は何も設定してません。 この設定で、アイテムをどんどん追加していき、ListViewの最大高さまで アイテムが埋まると、水平スクロールが表示され2列目が表示されるのですが、これを垂直スクロールで下に追加という形をとりたいのですが、 どうしたらいいのかわからないです。 (なぜCheckListBoxにしないのかというのは、複数選択ができないからです。) ご存知の方、ご教授願います。(××)

  • リストビューのハンドルについて

    リストビューコントロールのハンドルについて疑問に思う事がありまして、ご教授よろしくおねがいします。 通常リストビューをCreateWindow()で作成した時に戻り値として受け取るウィンドウハンドルに対してSetWindowFont()を行うとリストビュー全体のフォントが変更されます。 リストビュー関数にはListView_GetHeader( リストビューハンドル );という関数が用意されていてリストビューのカラム部分のハンドルを取得できます。 このハンドルに対してSetWindowFont()を行うとカラム部分だけのフォントが変更されます。 という事はアイテム部分だけのハンドルを取得し、SetWindowFont()でフォントを変更する事はできるのでしょうか? ご教授よろしくお願いいたします。

  • リストビューでのドラッグ&ドロップでの反転表示

    VC++にてエクスプローラもどきを作成していて、 ドラッグ&ドロップの操作を実装中です。 ListViewにて、OnLButtonDown内で マウスで押下されたフォルダイメージを CreateDragImageで作成しマウスカーソルを変更しました。 そして、ドラッグ中に、別フォルダへカーソルが移動した際、 そのフォルダを反転させるために、 OnDragOver内で、まず、全ての選択状態をクリアし、 for ( i = 0; i < list.GetItemCount(); i++ ){   item.iItem = i;   ListView_GetItem( list, &item2 );   item2.state = 0;   item2.stateMask = LVIS_SELECTED;   ListView_SetItem( list, &item ); } 対象となるフォルダのLV_ITEMを取得後に、 item.state = LVIS_SELECTED; item.stateMask = LVIS_SELECTED; ListView_SetItem( list, &item ); を行い選択状態に変更させました。 一応、ドラッグ&ドロップは、ある程度できているのですが、 描画が汚く、下記の2点について困っています。 1.ドラッグされたフォルダの反転表示が綺麗ではない(画像参照) 2.カーソル下に何のフォルダも無い場合は、   全ての選択状態をクリアだけでDragOverの処理を終了しているが、   前回選択状態にしたフォルダが反転表示(汚い状態で…)されたまま なにか、修正方法はありますでしょうか?

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

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

  • リストビューで最初に選択されたインデックスを取得したい

    リストビューについて質問いたします VC++5.0 & SDK で作成しています リストビューで最初に選択されたものを取得したいのですが (その選択がはずされれば次に選択されていたもの) GetFirstSelectedItemPositionはそれに相当するメッセージが 見当たらないのでSDKでは使えないようですが 何か良い方法はありませんでしょうか? よろしくお願いいたします

  • リストの複数選択について

    リストボックスで複数選択(拡張)に設定した場合に Ctrl キーを押しながらクリックすることによって、リスト内の項目を 1 つずつ選択、選択解除出来る機能を Ctrl キーを押さない状態で実現したいのですが 可能でしょうか? また、ほかの機能(コンポーネント)で代用出来る物があれば教えてください

  • リストビューの初期化について

    リストビューのアイテム(編集可能なところ)とサブアイテム(基本的には編集不可のところ)の表示位置(列)をプログラムから変更できるのでしょうか? 一列目にサブアイテム:1 二列目にサブアイテム:0という形にしたいのですが。。。 ご存知の方いらっしゃいましたらお願いいたします。

  • 【vb6】リストビューの複数の項目の削除

    お世話になります。 vb6のリストビューについて質問があります。 リストビューでコントロールキーやシフトキーを押して複数項目を選択したあと 選択された任意の項目だけを削除するというロジックを書きたいと思っています。 ですが、どのようにしたら、例えば1~4行目まである内の 2,4行目だけを削除できるのかが全く解りません。 .selectitem.indexだと選択した最後の行(2,4行を選択したら4行目)が インデックスに帰るので特定の行を取得できずお手上げ状態です。 解りづらい説明で申し訳ありませんが、 どうか教えてください。よろしくお願いします。