コンボボックスに文字列を挿入したい

解決


超初心者  2009-07-07 00:13:58  No: 70513

毎度お世話になります。

コンボボックスに文字列を入れたいのですがうまくいかなくて困っています。

void CNoticeDetailsDlg::DoDataExchange(CDataExchange* pDX)
{
  DDX_Control(pDX, IDC_STATUS, m_cbStatus);
}

BOOL CNoticeDetailsDlg::OnInitDialog()
{
  CDialog::OnInitDialog();

  m_cbStatus.InsertString(-1, _T("完了"));
  m_cbStatus.InsertString(-1, _T("拒否"));
  UpdateData(FALSE);//データ保存

  return TRUE;
}

プロパティのTypeはドロップダウン  リストにしています。

こういった感じで書いているのですが、まったく反映されません。間違っている個所を指摘していただけたら嬉しいです。

環境はvisual studio2005 VC++(MFC) vistaです。宜しくお願い致します。


超初心者  2009-07-07 04:38:18  No: 70514

自分で何度も試してみたんですが、やっぱりうまくいきません。

BOOL CNoticeDetailsDlg::OnInitDialog()
{
  CDialog::OnInitDialog();
  m_xcStatus.Clear();

  int err = 0;
  int cbErr = 0;

    if (!err)
    {
        cbErr = m_xcStatus.InsertString(-1, _T("完了"));
        if (cbErr == CB_ERR || cbErr == CB_ERRSPACE)
    {
      err = 1;
    }
    }
    if (!err)
    {
        cbErr = m_xcStatus.InsertString(-1, _T("拒否"));
        if (cbErr == CB_ERR || cbErr == CB_ERRSPACE)
    {
      err = 1;
    }
    }
    if (!err)
    {
    UpdateData(FALSE);//データ保存
    }

    return TRUE;
}

もしかしたら、初期化がうまくいってないかもとは思っているのですが・・・・
どうか知恵をお貸しください。宜しくお願い致します。


rin  2009-07-07 06:10:57  No: 70515

まず確認ですが

1:アプリケーションのタイプはなんでしょうか?
#ダイアログベースやらSDIやら

2:コンボボックスはどのようにつくってますか?
たとえば、ダイアログに貼り付けたりしてますか?
それとも、別の方法ですか?

3:リソースビュー(エディタ)で貼り付けてる場合。
コンボボックスは、単純にそのコントロールの大きさ以外に
「ドロップされるリストの表示サイズ」があります。
これを設定しないと、実際に動作するとき、どんなにアイテムを追加しても
リストがべろーんって出ません(初期値が0サイズのため)。
これだと、「何も追加できてない」ように見えます
(実際は、フォーカスをあてて、カーソルキーの下などを押すと選択できる)

もし、3に見事ヒットした場合。
リソースエディタ上で、コンボボックスの右端のボタンをクリックしてください
すると、サイズ変更枠が、下方向のみに変わります。
これを広げると、リスト表示のサイズが変更できる。
#これを試すときは、アイテム追加のソースを最初のころに戻しましょう。
#色々試してるうちに変なソースになってしまってることがあります。


超初心者  2009-07-07 19:42:22  No: 70516

rinさん、書き込みありがとうございます。お世話になります。

①タイプはダイアログベースで作成しています。

②コンボボックスはリソースビューでダイアログに張り付けてあります。

③これは、リソースビューでサイズを広げるという事ですよね?でしたらrinさんのおっしゃる通りのことをすでにやっているんですが、それでも駄目です・・・・。

表示されないだけで、実はちゃんと追加されているのかなと思ってm_xcStatus.GetCount();を実行してみましたが、-8589933460といった数字がでるだけで、追加すらできてないようです。

なんというか、お手上げ状態で・・・・・・・。原因がまったく掴めないです・・・・。


みい  2009-07-07 20:47:39  No: 70517

ちゃんとコンボボックスに結びついてないような感じがしますね。
一度
・DDXのIDとリソース上のコンボボックスのIDが一致しているか
・ヘッダーでの宣言がCComboBoxになっているか
確認してみてはいかがでしょうか。

ちなみにリストを空にしたいなら「Clear」じゃなくて「ResetContent」


aetos  2009-07-07 20:48:30  No: 70518

VS2008 SP1 WinXP SP3 で、OnInitDialog にご提示のコードをコピペして試してみましたが、見事に動きますね。


超初心者  2009-07-07 21:06:59  No: 70519

みいさん、書き込みありがとうございます。

IDが一致しているかどうかは何度見直しても同じでした・・・・。また、ヘッダーでの宣言もきちんとCComboBoxで宣言していました。

リストを空にするのはResetContentなんですね!参考になります。ありがとうございます。

aetosさん、書き込みありがとうございます。

試していただいたようでありがとうございます。aetosさんの方ではコピペで動いたのですね・・・・。ますますわからなくなりました・・・・・。

一度、今作成してあるコンボボックスを消して、もう一度最初から作成し直してみようかと思います。


超初心者  2009-07-16 21:08:25  No: 70520

皆様、お世話になります。

結局一から作り直しすることにしました。同じ内容で作り直した結果、今度は動きました。

結局原因は分からずじまいで、なんとも腑に落ちませんが割り切ります。

皆様の様々なアドバイス、心より感謝いたします。

また、今後も宜しくお願い致します。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加