2016-05-20 78 views
1

最初に2,3日間解決策を探していたと言いましょう...MFC C++ CListBox選択項目を取得

ListBoxの選択項目を取得しようとしています。これは私のコードです:私はこれをしようとすると

CListBox * pList1 = (CListBox *)GetDlgItem(IDC_LIST1); 
CString ItemSelected; 
// Get the name of the item selected in the Sample Tables list box 
// and store it in the CString variable declared above 
pList1->GetText(pList1->GetCurSel(), ItemSelected); 
MessageBox(ItemSelected, "TEST", MB_OK); 

は今、私はあなたのコードは、エラー処理を除いてOKに見える「パラメータがincorectある」

+0

'pList1-> GetCurSel()'は成功するとは限りません(リストボックスは選択を全く持たない)。その場合、 'LB_ERR'を返します。これは 'CListBox :: GetText'に渡す有効なインデックスではありません。 – IInspectable

+1

しかし、選択があります...これを行う別の方法がありますか? –

+0

最初にフルコンパイルを試してください。次に、デバッグしようとします。また、テストのために、GetCurSelの値を変数に代入して確認することもできます。最後に、 'CListBox'を' CString'変数に直接マッピングせず、単に 'UpdateData(TRUE)'を呼び出して変数値を使う理由は何ですか? –

答えて

3

をというエラーメッセージが表示されます。またMessageBoxのパラメータが正しく表示されません。最初のパラメータはHWNDである必要があります。私はこれがあなたの問題の根本原因だと信じています。使用代わりにMFC標準AfxMessageBox:はCListBoxが単一選択モードである場合

CListBox * pList1 = (CListBox *)GetDlgItem(IDC_LIST1); 

int nSel = pList1->GetCurSel(); 
if (nSel != LB_ERR) 
{ 
    CString ItemSelected; 
    pList1->GetText(nSel, ItemSelected); 
    AfxMessageBox(ItemSelected); 
} 
+0

ああ、 'HWND'パラメータを必要とする' MessageBox'。同じように、コードをデバッグすることで、問題を特定し、エラーの原因となった行を特定する必要があります。 –

3

、はCListBox :: GetCurSelが選択されたインデックスを返します。

CListBoxが複数選択モードの場合は、CListBox :: GetSelItemsを使用してインデックスのリストを返す必要があります。

「n」をミックスすることはできません。

いつもリターンコードをチェックしてください(他の人が書いているように)。

0

あなたは既に(classCListBoxの)データメンバMYLISTをお持ちの場合:HWNDパラメータを必要としない

int nSel = MyList.GetCurSel(); 
    CString ItemSelected; 
    if (nSel != LB_ERR) 
    { 
     MyList.GetText(nSel, ItemSelected); 
    } 
0

CWnd class has a MessageBox機能。しかし、はい、AfxMessageBoxは少し使いやすく、CWndから派生したオブジェクトを持たずにどこでもMFCコードで呼び出すことができます。また、注:もしWinAPI関数をMFCコード(ここでは必要ありませんが、他のケースでは可能です)に呼び出すと、混乱、間違い、および/または名前の衝突を避けるためにスコープ解決演算子を前置することをお勧めします(例::: MessageBox ...)。

OPコードの "無効なパラメータ"エラーの原因の1つは、UNICODEビルド構成でANSI文字列リテラル( "TEST")を使用することです。このケースでは、UNICODE文字列リテラル(L "TEST")を使用するか、少し良くする必要があります。_Tマクロ(_T( "TEST"))を使用すると、ANSIとUNICODEの両方の構成でビルドできます。

関連する問題