>さやびさん
>コンボ1で[動物]が選択された時、コンボ2は、[ねこ][いぬ]の複数を表示
>させたいということでしょうか?
そうです。
一つとは決まっていないので。。
コンボ2で[ねこ]を選んだら、コンボ3に[みけ][たま]とかを表示する仕様かな?
struct combo2Item {
int id;
int key;
CString name;
};
こんなのを作って、CPtrArrayに放り込んでおいて、
コンボ1のOnSelchangeで、全ての要素のkeyを比較して、
1つずつコンボ2にセットするかどうかを決めるのが簡単かと。
まずコンボ3は忘れて、ここまで作ってはどうでしょう。
表示と書いてしまうからおかしくなる訳でリストに追加と書くべきですね。
CSV上のデータをそのまま展開するだけでも可能だとは思いますけれど、
もう一歩踏み込んで自分が実現したいデータ構造をクラス化すると言うのも
一つの考え方でしょう。
単純に構造体を使って構築するもよしですし。
Blueさんも書かれている通り、この部分をどう構築するかがプログラマの腕の見せ所です。
うまく料理すれば、汎用的なデータ構造を作成できるかもしれません。
まあ、習作であればそこまで突き詰めずにまずは動作させる事を目標に考えても
良いかも知れませんけれど。
一ついえる事は、CString型のDataItem[]という配列だけで済ませようとしても駄目です。
これだけではコンボボックス1とコンボボックス2の関連を保持する事が出来ません。
せっかくCSVの形式まで考えたんですからもう一歩か二歩進めて見てはどうですか?
あと、CString型のDataItem[]という配列がダイアログのメンバー変数なら変数名の
最初にm_とかつけてm_DataItem[]とかにした方が後でソースを見たときにわかりやすいです。
ローカル変数ならその関数から抜けてしまうと開放されてしまうので注意が必要です。
まあ、どうせならCArrayなりCListなりを使うとかして可変長配列にした方が良いと
思いますけどね。
とにかく、まずは自分で仕組みまで含めて頭をひねってみてください。
こういうロジックは人から聞いて実装しても身につかないです。
もとい、
CListは可変長リストですね。
可変長配列と言えるのはCArrayの方です。
両方ともMFCのクラスなので調べるのは簡単です。
(付属のHELPで調べられます)
コンボ2に複数のアイテムを表示させるとの事ですが、
コンボボックスのアイテムは一つしか表示できません。
(えっ?私が知らないだけ?)
一つのアイテムを複数行で表示させるのは、オーナードローで出来ますが・・・。
同時に選択させるのじゃなくって
コンボのリストに入れるということでは??
多分、私もそうだと思います。
というか、私もそう書いているし。
> 今の、コンボ1に対してのコードを記述してみます。
CSVから切り出すコード示されてもしゃぁねぇですよ。
キモは「どんな構造でデータを持てば望みの動きが実現するか」ですから。
コンボボックスはただの見てくれでしかないし。
動物 → ねこ, いぬ
野菜 → キャベツ
...
という対応表を如何にプログラムで表現するか、でしょうが。
それさえできれば:
クリックされたのを拾う/対応表を引く/その結果をコンボに乗せる
でオシマイなんだから。
皆さん、ありがとうございます。
επιστημηさんも言う通り、
もっと動作に対してのプログラムをシンプルに考えながら
やってみようと思います!
> 動作に対してのプログラムをシンプルに考えながら
というより「(見た目はともかく)要はなにがしたいのよ?」
と常に自問しながらコード書いてください。
大切なのは「どうすればいいか」より「なにがしたいか」です。
実はこういう仕組みを考えるのって結構面白いんですけどね。
いかに無駄なくうまく動く仕組みを作るかって言うのは
一種のパズル的要素もあって面白いと思いますよ。