• 締切済み

CListBoxで選択した順番で項目を取得

Visual C++ 2013でMFCを利用しています。 CListBoxのSelectionプロパティを「拡張」にして、複数選択可能にしています。 Ctrl + マウスクリックで例えば項目番号0,2,1の順番に選択したとします。 GetSelItems()で選択されている項目リストを取得すると、昇順(例の場合は0,1,2)で返ってきてしまいます。 選択した順番どおりに項目番号を得るにはどういった方法がありますか?

  • Vsid
  • お礼率100% (1/1)

みんなの回答

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

まず変化前選択状況を格納する vector なり list なり配列なりを用意して、 OnSelChange() で今の選択状況と変化前選択状況を比較して増えた分を変化前選択状況の後方に追加。 選択順の項目番号ががほしい場合は変化前選択状況を見る。 ……という感じでできるんじゃないかなぁ。もちろん逆に選択数が減った場合とか選択のクリア機能を追加する 場合とかはその処理を考えなきゃならないけど。

Vsid
質問者

お礼

遅くなりました。ありがとうございます。調べてみます。

関連するQ&A

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

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

  • 【ListView】選択した項目を取得

    VB6の環境です。 リストビューで、選択した項目を ダブルクリックで取得したいと思います。 どのような方法があるか教えてください。 リストボックスのように扱えなくて苦戦しております。

  • リストビューの項目の追加と選択されている項目

    ソースから動的にリストビューの項目の追加方法 またそのうち選択されているもの(複数選択は行わない)が変わった時に どの項目が選択されているか取得する方法の2つが知りたいのですが。 加えてコンボボックスの項目をソースから動的に追加する方法を教えていただけると嬉しいです。

  • リストボックスのプロパティ「複数選択」の「標準」「拡張」の違い

    アクセス(2003)のリストボックスのプロパティ「複数選択」の 「標準」と「拡張」は何が違うのでしょうか? 左下の補足?が出るバーには 「リストボックスで複数の項目を選択できるかどうかを指定します」 とどちらとも記載されていますが、結局は同じなのですか? 複数選択したい場合はとりあえず「標準」を選択しとけばOKでしょうか? よろしくお願いします。

  • ファイルを複数選択した時のファイルの順番

    VB.NetでOpenFileDialogコントロールを使ってファイルを複数選択できるようにしました。 私が欲しいのは、このファイルを選択した順番をどうやって取得すればよいのか悩んでいます。 選択したファイル群はOpenFileDialogのFileNamesコレクションにファイル名が格納されています。 しかし、FileNamesコレクションはファイルを選択した順番に並んでいません。 色々なパターンを試してみましたがこの順番の規則性がわかりません。 規則性がわかればファイルを選択した順番がわかると思うのですが、なにかいい方法はないでしょうか? 【環境】Visual Basic 2008 Express Edition & Windows XP

  • ExcelVBA 選択したセルの取得

    こんにちは。ゆきのです。 選択した範囲のセルに対して、Excelのマクロで 1回ずつ処理を行いたいと考えています。 まずセル数を取得したいのですが、  「selection.cells.count」でセル数を取得すると、  同じセルが複数回カウントされます。 またセルの範囲を取得したいのですが、  「selection.address」で範囲を取得すると、  重複したセルを含んだそれぞれの範囲が取得されます。 例えば、  (1)  「$A$1」を「ctl」+「左クリック」で3回選択した状態だと、  「selection.address」が「$A$1,$A$1,$A$1」となり、  「selection.cells.count」は「3」となります。  (2)  「ctl」+「左クリック」で「A1:B1」「A1:A2」を連続で選択した状態だと、  「selection.address」が「$A$1:$B$1,$A$1:$A$2」となり、  「selection.cells.count」は「4」となります。  ($A$1が2回カウントされます) この時、同じセルを複数回カウントせずにセル数を 取得することはにできるのでしょうか? (上の例の場合ですと、(1)が「1」、(2)が「3」と取得したいです。) また、複数選択で範囲を取得する場合に選択が重複したセルを 除いた状態の範囲を取得することはできるのでしょうか? 処理したセルを記憶させるなどの方法は考えてみたのですが、 別の方法はないかと思い、質問させていただきました。 どなたか、教えて頂けませんか?? よろしくお願いします。

  • VBAでグラフのindexを取得したい

    EXCEL VBA(Office2010)にて、選択中のグラフ(マウスでクリックの状態。Ctrl+クリックではない)のWidthとHeightを取得したいです。Ctrl+クリックならActivechart指定でグラフのindexが取得できるので問題ないのですが、ただの選択状態だとActivateされていないため、それができません。Selection.Application.Activechart.Nameなどでグラフの名前は取得できても、同一の名前のグラフが存在する可能性があるため一意に定められず、この方法もダメでした。要するに、Typename(Selection)が"Chartarea"の状態でそのグラフのindexを取得したい、ということになります。どうかよろしくお願いします。

  • spread6.0でShiftキードラッグの行選択

    VB6、spread6.0Jで開発をしております。 spreadの行ヘッダをマウスのドラッグで複数選択した場合に、コード上で行番号を取得したいのですが、どのようにすればいいのか検索しても分からなかったので、教えてください。 ctrlで複数選択するのも必要なので、オペレーションモードは「拡張選択モード」にしているのですが、shiftキーで行選択した状態で、コードで行番号を取得しようとすると、1行分しか取得できていないでいます。 どうか、宜しくお願いいたします。

  • リストボックスからの複数選択

    初心者です。 ListBoxで複数の項目を選択することは可能でしょうか? ListBoxのプロパティ MultiSelect を 標準or拡張 にすると 複数選択できることは分かりましたが、選択(強調表示)した 値のみを取得するにはどうしたらよいのでしょうか?

  • FileListBoxでの複数ファイル選択

    FileListBoxコントロールのMultiSelectプロパティを「2-拡張」にして、 CtrlやShiftを併用することでファイルを複数選択できるようにしました。 とりあえず動作確認段階なので、ファイル選択状態でCommandButtonを押下することで、ファイル名を表示するようにしたいのですが、 Msgbox (File1.FileName) ※File1はFileListBoxコントロール名 では、当たり前の事ながら、(複数選択したうちの)1ファイルしか表示されません。FileNameプロパティにインデックスを付けるなど素人考えで色々当たってみたのですが、どうも上手くいきません。 選択した全てのファイル名をフルパスで取得したいのですが、何かいいテクニックはないでしょうか?

専門家に質問してみよう