コンボボックスの表示について

[戻る]
マグマ 2001/10/29(月) 21:01:09
コンボボックスの表示についてお聞きしたいことがあります。

コンボボックスは、リストで選択するとその選択された要素が、自動的にダイアログに表示されるようになるとおもうのですが、
ResetContent()を使うと、表示されている要素も消えてしまいます。

選択するために開く部分の要素を空にして、表示されている部分をそのままにしたいのですが?
どなたか良い方法をご存知ないでしょうか?

void CDlg::OnSelchangeClist() 
{
    CComboBox* y_group_pc = (CComboBox*)GetDlgItem(IDC_CLIST);
    CComboBox* y_pc = (CComboBox*)GetDlgItem(IDC_CLIST1);
    int y_group_i = y_group_pc->GetCurSel();
    CString y_sst;
y_group_pc->GetLBText(y_group_i,y_sst);

    y_pc->ResetContent();

マグマ 2001/10/29(月) 21:09:55
    POSITION y_pos;
    CString y_str;
    y_pos = list1.GetHeadPosition();
    while(y_pos){
        y_str= list1.GetNext(y_pos);
     }
}

list1にはコンボボックスIDC_CLISTで選択された項目に応じた要素が格納されています。

IDC_CLISTで項目を選択する度に、IDC_CLIST1で表示されたり、書き込んだ内容が消えてしまい困っています。

上のレスは書いている途中で送信してしまい見づらくなってしまいました。申し訳ございません。

sugar 2001/10/30(火) 13:06:52
コンボボックスっていうのは、そういうものだと思います。
いくつかの候補の中から1つを選ぶ、というのがコンボボックスの基本機能ですから、
候補がなくなれば、当然選べるものがなくなるわけで...

コンボボックスの属性が「ドロップダウン」であれば、ResetContent()実行直後、
テキストをセットしてあげる事で逃げられるかもしれませんが(未確認)。

マグマ 2001/10/30(火) 14:15:16
お返事ありがとうございます。
自分も色々調査しました。コンボボックスには、エディットコントロールの部分と
リストボックスの部分があると思います。←MSDNによると
ResetContent()をやめて、リストボックスの部分だけを消す様にしました。

以下のプログラムのようにリストの項目数を取得してから、DeleteStringで一つずつ
消していく方法をとりました。しかしご指摘ありましたように選択する候補がなくなってしまったので、
エディットコントロール部分もやはり消えてしまいます。

しかし、次のような改善がありました。
・手入力でエディットコントロールに文字をいれた場合、その内容は消えなくなりました。
・選択した要素がリストボックス部分の先頭の要素だとエディットコントロールに文字が残ります。
(選択された文字列取得をしてリストの先頭の要素に入れる動作をしたがこの時は、上手くいかない)

この理由がわかりません。

int n = y_pc->GetCount();
for(int i=n-1;i>= 0;i--){
   y_pc->DeleteString(i);
}

エディットで選択されている項目の文字列は取得できるので、リストの中身を消した後に、エディット部分に
文字列を抽入できる方法があればできると思うのですが・・・どなたかご存知ないでしょうか。

sugar 2001/10/30(火) 15:15:21
まず、このコンボボックスは「ドロップダウン」ですか、「ドロップダウンリスト」ですか?
前者であれば、リストを空にした後、取得しておいた文字列をSetWindowText()すれば、
リスト部にその文字列がエントリされているか否かに関わらず、エディット部に表示する事はできます。
後者の場合、リスト部にある候補の中のものしか表示する事はできません。

...回答になってますか??

ちなみに、ResetContent()も、1件ずつ全て候補を消すのも、同じことだと思います。
素直にResetContent()を使っちゃっていいのではないでしょうか。

まぐま 2001/10/30(火) 15:49:18
お返事ありがとうございます。
ようやく、光が見えてきました。
最初SetWindowTextの意味があまりわからなかったのですが、よくよく読むと上手く行きそうです。

ただ、すみませんコンボボックスの「ドロップダウン」、「ドロップダウンリスト」の設定はどのようにして
どこで確認できるのでしょうか?

すみません終えていただけないでしょうか。

sugar 2001/10/30(火) 16:54:50
ダイアログエディタからコンボボックスのプロパティで確認できます。

「ドロップダウン」は、リストから選びますが、エディット部への入力も可能です。
「ドロップダウンリスト」は、リスト部から選ぶだけで、入力はできません。

ちなみに「標準」ってやつは「ドロップダウン」と機能が同じですが、リスト部が見えっぱなしです。
フォント選択ダイアログのフォント名を選ぶところが、それに該当します。

マグマ 2001/10/30(火) 17:15:40
[[解決]]
いろいろと今回もお世話になりました。
ご親切にして頂き、大変助かりました。ありがとうございます。

古いスレッドには追加発言できません。