複数のコンボボックスを連動するには・・・ – 固定ページ 2 – プログラミング – Home

複数のコンボボックスを連動するには・・...
 
通知
すべてクリア

[解決済] 複数のコンボボックスを連動するには・・・

固定ページ 2 / 2

tikira
 tikira
(@tikira)
ゲスト
結合: 18年前
投稿: 15
Topic starter  

>さやびさん

>コンボ1で[動物]が選択された時、コンボ2は、[ねこ][いぬ]の複数を表示
>させたいということでしょうか?

そうです。
一つとは決まっていないので。。


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

コンボ2で[ねこ]を選んだら、コンボ3に[みけ][たま]とかを表示する仕様かな?

struct combo2Item {
int id;
int key;
CString name;
};

こんなのを作って、CPtrArrayに放り込んでおいて、
コンボ1のOnSelchangeで、全ての要素のkeyを比較して、
1つずつコンボ2にセットするかどうかを決めるのが簡単かと。

まずコンボ3は忘れて、ここまで作ってはどうでしょう。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

表示と書いてしまうからおかしくなる訳でリストに追加と書くべきですね。
CSV上のデータをそのまま展開するだけでも可能だとは思いますけれど、
もう一歩踏み込んで自分が実現したいデータ構造をクラス化すると言うのも
一つの考え方でしょう。
単純に構造体を使って構築するもよしですし。
Blueさんも書かれている通り、この部分をどう構築するかがプログラマの腕の見せ所です。
うまく料理すれば、汎用的なデータ構造を作成できるかもしれません。
まあ、習作であればそこまで突き詰めずにまずは動作させる事を目標に考えても
良いかも知れませんけれど。

一ついえる事は、CString型のDataItem[]という配列だけで済ませようとしても駄目です。
これだけではコンボボックス1とコンボボックス2の関連を保持する事が出来ません。
せっかくCSVの形式まで考えたんですからもう一歩か二歩進めて見てはどうですか?
あと、CString型のDataItem[]という配列がダイアログのメンバー変数なら変数名の
最初にm_とかつけてm_DataItem[]とかにした方が後でソースを見たときにわかりやすいです。
ローカル変数ならその関数から抜けてしまうと開放されてしまうので注意が必要です。
まあ、どうせならCArrayなりCListなりを使うとかして可変長配列にした方が良いと
思いますけどね。

とにかく、まずは自分で仕組みまで含めて頭をひねってみてください。
こういうロジックは人から聞いて実装しても身につかないです。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

もとい、
CListは可変長リストですね。
可変長配列と言えるのはCArrayの方です。
両方ともMFCのクラスなので調べるのは簡単です。
(付属のHELPで調べられます)


返信引用
さやぴ
 さやぴ
(@さやぴ)
ゲスト
結合: 18年前
投稿: 29
 

コンボ2に複数のアイテムを表示させるとの事ですが、
コンボボックスのアイテムは一つしか表示できません。
(えっ?私が知らないだけ?)

一つのアイテムを複数行で表示させるのは、オーナードローで出来ますが・・・。


返信引用
翼
 翼
(@翼)
ゲスト
結合: 19年前
投稿: 11
 

同時に選択させるのじゃなくって
コンボのリストに入れるということでは??


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

多分、私もそうだと思います。
というか、私もそう書いているし。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

> 今の、コンボ1に対してのコードを記述してみます。

CSVから切り出すコード示されてもしゃぁねぇですよ。
キモは「どんな構造でデータを持てば望みの動きが実現するか」ですから。
コンボボックスはただの見てくれでしかないし。

動物 → ねこ, いぬ
野菜 → キャベツ
...

という対応表を如何にプログラムで表現するか、でしょうが。
それさえできれば:
 クリックされたのを拾う/対応表を引く/その結果をコンボに乗せる
でオシマイなんだから。


返信引用
tikira
 tikira
(@tikira)
ゲスト
結合: 18年前
投稿: 15
Topic starter  

皆さん、ありがとうございます。
επιστημηさんも言う通り、
もっと動作に対してのプログラムをシンプルに考えながら
やってみようと思います!


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

> 動作に対してのプログラムをシンプルに考えながら

というより「(見た目はともかく)要はなにがしたいのよ?」
と常に自問しながらコード書いてください。

大切なのは「どうすればいいか」より「なにがしたいか」です。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

実はこういう仕組みを考えるのって結構面白いんですけどね。
いかに無駄なくうまく動く仕組みを作るかって言うのは
一種のパズル的要素もあって面白いと思いますよ。


返信引用
固定ページ 2 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました