VC++6.0 SDIです。
CString型の変数に、コンボボックスのデータを所得し、
選択したコンボボックスの内容に応じて異なった処理をさせたいのですが、どうしたら良いでしょうか?
私は、下記コードで出来るかな??ってイメージしていたのですが・・。
下記コードを改造してなんとか・・・
という拘り無く、コンボボックスの内容によって違う処理をする分岐の一般的な方法が知りたいと思っています。
よろしくお願い致します。
CString A;
GetWindowText(A);
switch(A){
case '文字列1':{
処理
break;
}
case '文字列2':{
処理
break;
}
・
・
・
default :{
処理
break;
}
}
No.3ベストアンサー
- 回答日時:
#2です。
コンボボックスからいずれかのアイテムが選択された際、
その選択に呼応して処理を分岐させるのですよね。
サンプルとして提示した構造体の3番目のメンバは、
関数へのポインタです。
>int (*method)(void*);
#説明は割愛します。[関数へのポインタ]でweb検索どうぞ。
#[メンバ関数へのポインタ]とする必要があるかどうかは全体の設計次第
考え方は次のとおり。
それぞれの処理(捌き方、method)を、それぞれ関数にしてやることで
switchによる分岐自体を排除する。
提示した構造体の使い方ですが、
例えばですね、
[1] この構造体の配列を定義して、
[2] コンボボックスの初期化で、配列要素のcombo_item_index, item_textを用いて
CComboBox::InsertString()
[3] 選択された暁には、配列名[GetCurSel()].method(適当な引数へのポインタ)
以上。参考にしてくださいね。鵜呑みはだめよ。
このような方法があるのですね!
大変勉強になりました。
ddnp009さんありがとう御座いました。
ちなみに下記サイトを参考にしました。
http://www5b.biglobe.ne.jp/~kouta_y/c/c08.html
No.2
- 回答日時:
コンボボックスのアイテム(列挙されたテキスト)が決まっていて、
かつSortオプションも切るのであれば、GetCurSel()に依る方法がとれますよね。
この場合、値はintをとるのでswitchによる分岐が普通に可能です。
また、次のような仕掛けを用意しておけば、
希望する列挙位置に所定のテキストを載せられるはずですよね。
struct StringType
{
int combo_item_index;
CString item_text;
int (*method)(void*);
};
これによりパフォーマンスを維持しつつ、目的を達成できるでしょう。
他にも定石らしいのはあるかもしれませんが、
要はプログラマの工夫と経験とセンス次第。
この回答への補足
GetCurSel()を使って分岐することが出来ました。
ただ、この構造体の使い方がよくわかりません。
>struct StringType
>{
> int combo_item_index;
> CString item_text;
> int (*method)(void*);
>};
int combo_item_index;//コンボックスのインデックスの番号この値でswitch文の分岐をする。
CString item_text;//インデックス番号のコンボボックスのテキストを入れる変数。
int (*method)(void*);//??
今回は、コンボボックスのテキストデータは、選ぶために使用するだけで、分岐した先で実際の処理をさせるため必要ないのですが、勉強のために知っておきたいです。
ddnp009さんアドバイスありがとう御座います。
色々なパターンを経験できるように、
これからddnp009さんがアドバイスしてくださった方法で試してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript jsで、switch文で書かれた分をif文にできませんか。 1 2022/07/28 15:10
- Excel(エクセル) Excel コンボボックス バックカラー 1 2023/02/18 08:06
- Visual Basic(VBA) 指定した文字から指定した文字のスペースまでを削除するVBAの構文について 6 2022/07/24 22:20
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- Java Javaの問題なのですが、 永久ループを使って以下に従って数値を出力するプログラムを作成する。 ・1 3 2023/06/06 18:43
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- 情報処理技術者・Microsoft認定資格 (パイプライン処理)基本情報技術者の演習問題について 1 2023/03/11 17:47
- Visual Basic(VBA) 特定の文字を条件に指定範囲のデータを貼り付けるVBA 3 2023/01/15 06:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列の長さの上限
-
市販のビンゴカードについて
-
配列で格納したものをmsgboxで...
-
複数の選択範囲の行番号を個別...
-
パイソンの
-
9枚の写真がA4 1枚に印刷できま...
-
【C言語】配列の中に配列を入れ...
-
【C言語】プログラミングの質問...
-
テキストファイルから文字列を...
-
【VBS】 フォルダ直下のファイ...
-
ExcelVBAで質問です。離れた二...
-
【速いブラインドタッチ】手を...
-
配列を使わずに、変数名を動的...
-
Excel、VBAのユーザーフォーム...
-
c++によるジャンケンプログラム
-
自販機での金銭収受を想定した...
-
VBでC言語のポインタみたい...
-
エラ-メッセ-ジの意味を教え...
-
C++ 配列を返すには?
-
キーボード配列をもとに戻す方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列の参照渡しで型が一致しま...
-
配列を使わずに、変数名を動的...
-
VBで構造体の配列を関数に渡す...
-
配列で格納したものをmsgboxで...
-
unsigned char配列への入力の仕方
-
C# Listを使わずに2次元配列の...
-
C# 配列の変数宣言について。
-
擬似コード 長さがmの配列でな...
-
【速いブラインドタッチ】手を...
-
パイソンの
-
C言語初心者 ポインタについて...
-
ExcelVBAで質問です。離れた二...
-
配列を含む構造体の初期値について
-
複数の選択範囲の行番号を個別...
-
Functionの戻り値を2次元配列...
-
C++ vectorに配列をプッシュしたい
-
先頭アドレスとは何ですか?
-
テキストファイルから文字列を...
-
Redimした動的配列はEraseする...
おすすめ情報