MFCのリストボックスについて

このQ&Aのポイント
  • VC6.0で作成したMFCアプリケーションのリストボックス内に存在するカーソルの位置を取得する方法について質問があります。
  • リストボックスの選択位置を取得するためには、OnSelchangeDatatable関数内でGetIndex関数を呼び出す必要があります。
  • しかし、現在の実装ではm_nCount変数には常に0が入ってしまいます。この原因はOnSelchangeDatatable関数が他の関数内から呼び出されないためだと思われます。また、0から始まるインデックスとは、選択された項目のリストボックス内での位置を示すものです。
回答を見る
  • ベストアンサー

MFCのリストボックスについて

MFCをVC6.0で作成しています。現在、ダイアログボックスを作成しているのですが、ダイアログボックスの中のリストボックスについて、教えてください。 void CFileReadeDlg::GetIndex() { UpdateData(TRUE); m_nCount = m_xcList.GetCurSel(); if(m_nCount==LB_ERR) { AfxMessageBox("選択してください"); } } の関数で、リストボックス内に存在するカーソルの位置を割り出したいのですが、 この関数は、 void CFileReadeDlg::OnSelchangeDatatable() { // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください GetIndex(); } のようにリストボックスの中のセルを変更した際に稼動する関数内で呼び出しています。 ですが、実際、このm_nCountには、0しか入りません。 これは、単にOnSelchangeDatatable()の関数を何処かの関数内にも呼び出していないからでしょうか。 そもそも、呼び出す必要はないかと思っていたのですが。 又、VCのヘルプに『単一選択リスト ボックスで、現在選択されている項目があれば、その項目の 0 から始まるインデックスを取得します』 とありましたが、0から始まるインデックスとは、どういうことを意味しているのでしょうか。 よろしくお願いします。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

OnSelchangeDatatableはメッセージマップに登録されているのでしょうか? BEGIN_MESSAGE_MAP(CXXXDlg, CDialog)   //{{AFX_MSG_MAP(CXXXDlg)   ON_WM_PAINT()   ON_WM_QUERYDRAGICON()   ON_LBN_SELCHANGE(IDC_LIST1, OnSelchangeDatatable)   //}}AFX_MSG_MAP END_MESSAGE_MAP() といった具合にメッセージマップが記述されていないとOnSelchangeDatatableへ制御が移りませんよ IDC_LIST1、CXXXDlgは 実際のリソースIDやクラス名と読み替えてください ClassWizardから追加するなら オブジェクトIDでリストボックスのリソースIDを選択 メッセージでLBN_SELCHANGEを選択 関数の追加をクリック メンバ関数の追加で必要なら関数名を修正 といった手順で追加しましょう メッセージマップとヘッダーでの宣言、CPPファイルへの関数スケルトンを作成してくれます 0から始まるインデックスとは リストボックスに5項目あるなら 1番目 ... 0 2番目 ... 1 3番目 ... 2 4番目 ... 3 5番目 ... 4 といった値になるということです

nanami_wic
質問者

お礼

素早いご解答&適切なご解答ありがとうございます。 ご指摘の点を修正しましたところ、立派に機能し始めました。ありがとうございます。 また、0から始まる~のくだりに関しては、初歩的なことなのにも関わらず、ご丁寧にお答えくださり、ありがとうございます。

関連するQ&A

  • MFCでのコンボボックスについて

    ご教授願いたくよろしくお願いします。 初歩的な質問ですみません。 何度やっても表示されません。 開発環境 OS:WindowsXP PP:VC++ 6.0 MFC 使用 質問 コンボボックスの初期値として、"F3"という文字を コンボボックスのテキストに表示させたいのです。 コンボボックスのリストから選択した項目の文字列を表示させたいのですが、できません。 コンボボックスのプロパティとしては、 タイプ:ドロップダウン オーナー描画:いいえ 初期描画で使用しているロジックとしては、 CString sss; m_cmb1.GetLBText(0, sss); m_cmb1.SetWindowText(sss); UpdateData(FALSE); ※m_cmb1は、CComboBox の変数です。 参考になるURLやロジックをお願いします!

  • リストボックスについて

    リストボックスの横幅は指定できるのでしょうか? リストボックスの見栄えを良くするため、リストボックス内にテーブルを使用 したいのですが可能でしょうか? 下図のように、コード+名称を1つの選択項目とする為、コードと名称の  桁位置を固定したいのですが、、、   aaa あああ bb いいいいい ccc ううううう 環境はIEです、宜しくお願いします 

    • ベストアンサー
    • HTML
  • エクセルマクロリストボックスの作成方法について

    最近、マクロを勉強し始めたばかりで困っています。 【質問内容】 ダイアログを作成し、リストボックスからリストを作成する方法についてですが、例えばリストボックスが2つあり (1)リストボックス1では、「A、B」が選択できる。 (2)(1)で「A」を選択するとリストボックス2では「C、D」が選択できる。 (3)(1)で「B」を選択するとリストボックス2では「E、F」が選択できる。 といった、エクセルで言えば入力規則のindirect関数のような設定方法についてお教えいただけないでしょうか? 恐れ入りますがよろしくお願いいたします。

  • リストボックスについて。

    普通、リストボックスで項目を選択してからsubmitボタンで、情報を転送しますよね。そうではなくて、リストボックスを開いて、項目をクリックしたらデータの受け渡しをするようにしたい場合はどうすればいいでしょうか。そういうサイトを見たことがあったような気がしたので、もしあるのなら使いたいと思い、質問してみました。

    • ベストアンサー
    • HTML
  • リストボックスの文字列の取得

    VC++でダイアログのリストボックスに文字列を入れました。この文字列を別のエディタボックスに同じ内容を表示したいのですが、その方法がわかりません。誰か教えてください。お願いします

  • エクセル2013のリストボックス

    エクセル2010でワークシート上に配置したリストボックスがあります。 ActiveXではなくフォームコントロールのリストボックスです。 これに11項目のリストを設定してあります。 2010ではまったく問題がないのですが、エクセル2013で開くと下の2項目が選択できません。 2010と2013では互換性がないのでしょうか?

  • リストボックスで表示

    例えばhtmlページに [ID、名称(text)]、[あ、い(リストボックス)] があってID,名称を入力して(その下に3つぐらい項目があって) リストボックスで「う」、「え」 と二つあり「う」を選択したら本かパソコンを入力できるようにでき、 「え」と選択したら同じように選択できるようにはどうしたらいいですか。 なお表示されるページはリストボックスの中を変えたら表示される (同じhtml内で) 本を選択したらID,名称,本(リストボックス)であとは見えなくする(Focus)にはどうしたらいいですか もしかしてこれってjavascriptじゃないとできない?

  • 自作ダイアログボックス中のエディットボックスでCtrl+Aを使えるようにしたい。

    リソースエディタで作成したダイアログボックスの中のエディットボックスで、 Ctrl+Aで全範囲選択をしたいのですが実現方法が分かりません。 同様に、リストビューの選択行を「Delキー」で削除させる方法も教えていただきたいです。 (削除ボタンを作成し、その押下によって削除できるようにはなっています。) 環境は、VC++ 6.0、Win32 APIです。 よろしくお願い致します。

  • エクセルのリストボックスの使い方

     WindowsXP Pro エクセル2003です。  エクセルのコントロールボックス機能を使ってリストボックスをつくりました。  リストボックスからある項目を選択するとアクティブセルにそのデータが入るようにしています。(ActiveCell.Value = ListBox1.Value)その後、セルは下に移動させます(Selection.Offset1,0).Select)。  そこで、もう一度同じ項目を入力するために上のセルと同じ項目をクリックしてもその項目が入力されません。 コントロールボックスのアクションは、リスト内の「他の項目をクリックしたとき」に実行されるということで、同じ項目は続けて指定できないようになっているようです。そこで、ある項目をクリックしたら、リスト項目内で違うところに選んだリストの場所を移動させたいと思っているのですが、そういうことができるのでしょうか。  ご存じの方よろしくお願いします。

  • エクセルのリストボックスから複数選択する方法

    エクセルのリストボックスを作成し、一つの項目を選択することはできるのですが、複数項目を選択することができず困っています。いくつかサイトを見て作成しましたが、うまくいきません。 エクセル2010で、「開発」→「挿入」→「Activexコントロールのリストボックス」を選び、マクロを入れたつもりですが、そのマクロが合っていないのか、何も反映されません。エクセルに慣れていないのでいろいろなサイトを見ながら真似したのですが駄目でした・・・。ご存じの方おりましたらお助けください。よろしくお願いいたします。 もし可能であれば、複数項目を選択した上で自由記述が同じセルにできるとなお助かります。

専門家に質問してみよう