• ベストアンサー

文字列を追加する方法

こんにちは  VisualC++6.0 SDI でプログラムの勉強をしています。 CString dataA;  //例 dataA = 06 CString dataB; //例 dataB = P1 m_Combo1.GetWindowText(dataA); m_Combo2.GetWindowText(dataB); コンボボックスからデータを取得し、 そのデータを1つにまとめて「 06P1 」のようにするにはどのようにしたら良いでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • yosi_yosi
  • ベストアンサー率35% (165/468)
回答No.1

CString型を使っているのであれば、 dataA += dataB; もしくは CString dataC = dataA + dataB;

hagimoto
質問者

お礼

ありがとう御座います。 ずっと悩んでいたのでとても助かりました。

関連するQ&A

  • 複数のコンボボックスをforなどで扱う方法

    VIsualC++6.0 SDI でプログラムの勉強をしています。 コンボボックス1 コンボボックス2 コンボボックス3   ・   ・ のようなダイアログボックスがあり、 コンボボックスについては、一個一個メンバ変数を割り当て、初期化をしています。 m_combo1.SetCurSel(0); m_combo2.SetCurSel(1); m_combo3.SetCurSel(2); これを、for(int i=0; i < n; i++){ のような繰り返し文を使って書にはどうやったらよいのでしょうか? また他に方法があったり、考え方が根本的に違っているようならご指摘ください。 一先ず、初期化は一個一個書いて終わらせたのですが、 実際の処理では、複数あるコンボボックスのデータを順々に送信する。 送信し終ったらまたコンボボックス1のデータを送信・・・。 と、ストップボタンを押してスレッドを抜けるまで送信し続けると言う処理をさせたいのですが、 初期化のように出来ないため、質問させて頂きました。 よろしくお願いします。

  • コンボボックス表示文字列を取得する場合

    VC++ver6.0を使用しています。 コンボボックスのドロップダウンリストより 表示されている文字列を取得しようと思い、 下記のようにコーディングを行いました。 コンボボックスメンバ変数名:m_combo_year ON_CBN_SELCHANGE(IDC_COMBO_HYOJI_SEIREKI, OnSelChangeComboHyojiSeireki) void CKoyomiDlg::OnSelChangeComboHyojiSeireki() {  CString strComboYear;  m_combo_year.GetWindowText(strComboYear); } 実行すると、 ドロップダウンリストを 初期値2007 → 2006選択 → 2005選択 と、2回選択した場合 取得する値は 起動せず → 2007 → 2006 と、「選択した値」ではなく「表示していた値」を取得してしまいます。 何か解決策はございますでしょうか。 宜しくお願い致します。

  • switch文について

    VC++6.0 SDIです。 CString型の変数に、コンボボックスのデータを所得し、 選択したコンボボックスの内容に応じて異なった処理をさせたいのですが、どうしたら良いでしょうか? 私は、下記コードで出来るかな??ってイメージしていたのですが・・。 下記コードを改造してなんとか・・・ という拘り無く、コンボボックスの内容によって違う処理をする分岐の一般的な方法が知りたいと思っています。 よろしくお願い致します。 CString A; GetWindowText(A);  switch(A){  case '文字列1':{  処理  break;  }  case '文字列2':{  処理  break;  } ・ ・ ・  default :{  処理 break; } }

  • コンボボックスに追加入力したデータを次回プログラムを動かすときに使えるようにしたい

    VB6を独学でやっていますので、どなたか教えてください。 コンボボックスに追加入力したデータを、次回プログラムを動かすときに使えるようにしたいのですが、どうしたらいいのでしょうか? combo1.addItem combo1.text だけでは、次回立ち上げると消えてしまっています。

  • VC++ MFC エラーコード C2248 private メンバ (クラス 'CObject'で…

    VC++ MFC エラーコード C2248 現在、ダイアログAにあるコンボボックス(IDC_COMBO1)に単語を登録、削除する処理をしています。 ダイアログAには他に[登録]ボタン(IDC_BUTTON1)と[削除]ボタン(IDC_BUTTON2)があります。 IDC_COMBO1 を CComboBox m_combo; として // [登録]ボタン押下時 void CADlg::OnBnClickedButton1() { CString Txt, old; int ret = 0, count = 0, i; m_combo.GetWindowText(Txt); if ( strcmp(Txt, "") == 0 ) { AfxMessageBox( _T("語句を入力してください")); return; } // コンボボックスのリスト数取得 count = m_combo.GetCount(); for(i = 0; i < count; i++){ // IDC_COMBO1に登録済みの語句を順番に調べていく m_combo.GetLBText(i, old); // 既に登録済みの名前があった場合 if (oldFile == Txt){ ret = MessageBox( _T("上書きしますか?"), _T("語句登録"), MB_YESNO|MB_ICONEXCLAMATION|MB_DEFBUTTON2 ); } } if ( ret == IDYES ) { return; } else if ( ret == IDNO ) { // 後ほど説明します CBDlg dlg; dlg.DoModal(); m_combo1.AddString(NewName); // extern CString NewName;←グローバル変数(Bダイアログから) return; } // 登録されていない語句の場合 m_combo.AddString(Txt); } 上記の登録の方、エラーなくコンパイルがとおり、コンボボックスにもちゃんと格納されています。 削除の方もエラーなくちゃんとコンボボックスから削除されます。 次に >else if ( ret == IDNO ) の部分なのですが [いいえ]ボタン(IDNO)が押された場合にはダイアログBが表示されます。 ダイアログBには語句を入力するエディットボックスIDC_EDIT1、[登録]ボタン(IDC_TOUROKU)、[取り消し]ボタン(IDC_TORIKESI)があります。 IDC_EDIT1 を CEdit m_ed1; として ここのBダイアログでもAダイアログ中のコンボボックスに格納されている語句が入力された場合はメッセージボックスを表示したいのです。 そこで void CBDlg::OnBnClickedTouroku() { // TODO: ここにコントロール通知ハンドラ コードを追加します。 int rup, cnt, ret; CString oldf; CADlg cad; CComboBox cfdn = cad.m_combo; m_ed1.GetWindowText(NewName); // CString NewName;←グローバル変数 // Aダイアログ中のコンボボックスリスト数の取得 cnt = cfdn.GetCount(); for(rup = 0; rup < cnt; rup++){ // Aダイアログのコンボボックス中に登録されている語句取得 cfdn.GetLBText(rup, oldf); if (oldf == NewName){ ret = MessageBox( _T("本当に上書きしてもいいですか?"), _T("環境設定"), MB_YESNO|MB_ICONEXCLAMATION|MB_DEFBUTTON2 ); } } if(ret == IDOK){ OnOK(); } else{ return; } } としました。 ここでコンパイルすると 1>c:\program files\microsoft visual studio 8\vc\atlmfc\include\afxwin.h(1820) : error C2248: 'CObject::CObject' : private メンバ (クラス 'CObject' で宣言されている) にアクセスできません。 1> c:\program files\microsoft visual studio 8\vc\atlmfc\include\afx.h(558) : 'CObject::CObject' の宣言を確認してください。 1> c:\program files\microsoft visual studio 8\vc\atlmfc\include\afx.h(529) : 'CObject' の宣言を確認してください。 1> コンパイラでのこの診断により関数 'CCmdTarget::CCmdTarget(const CCmdTarget &)' が生成されました。 のようにエラーがでます。 調べてみると CComboBox cfdn = cad.m_combo; が原因のようです。 ググってみたりしたのですが解消法がわからず質問させていただきました。 よろしくお願いします。

  • バイナリデータの書込みについて

    こんにちは、初めまして。 さっそくなんですが、バイナリデータの操作を行っていて、ちょっと気になることがあり、質問させて頂きます。 現在あるバイナリデータファイルの読出しには成功し、一応思った通りに書込み、 そのデータは壊れず、読み出せたんですが・・・。 そのバイナリデータファイルは当然のように、アスキー型や文字型、ビッグエンディアンのshortやlongがバイト長ごとに入り混じってます。 アスキー型や文字型は問題なく読み書きできるんですが、 ビッグエンディアンのshortやlongを書き込む時、バイト長を指定してやると、データが壊れてしまいます。 例えば、2バイトのビッグエンディアンのshortを読み出して、そのままリスト値に変換をかけ、なにも加工することなく、再びバイナリ構造体に変換しても、データが壊れてしまいます。 例 失敗) INは読み出すファイル、OUTは書き込むファイル read (IN,$dataB,2); $dataA = unpack("n2",$dataB); $dataB2 = pack("n2",$dataA); print OUT $dataB2; 現在、packするときに、データ長をしてせず、*とすることでデータの書込みには成功してる(ちゃんと読めるデータとして)んですが、これから先、こういったデータを加工して書き込む場合、データ長を指定せずに書き込むというのは・・・。ちょっと嫌な感じです。 例 成功) INは読み出すファイル、OUTは書き込むファイル read (IN,$dataB,2); $dataA = unpack("n2",$dataB); $dataB2 = pack("n*",$dataA); print OUT $dataB2; 何が原因なのか、わからず困っています。 なにぶん素人なもので、やってること自体間違っているのかもしれませんが、どなたか御回答頂ければ幸いです。 ここに書いている質問の意図がわからない等、ありましたらその旨お答え頂ければ、私の知る限りお答えしようと思いますので、どうか宜しくお願い致します。

    • ベストアンサー
    • Perl
  • eMbedded Visual C++のコンボボックスへの追加

    eMbedded Visual C++で作成したコンボボックスに m_combo1.InsertString(-1,_T("abc")); のように項目を追加しているのですが、 InsertStringで追加する前に、追加しようとしている 項目がすでにコンボボックスに存在しているか どうかを調べる方法はありますでしょうか? GetCountで個数を取得して、その個数分GetTextを 実行して調べる方法もあると思いますが、もっと簡単 に実現する方法はないかなと思いまして質問させて 頂きました。

  • 差分バックアップだと二世代前のデータは消えますか?

    I-O DATAの外付けハードディスクを使用しています。 EasySaver3.1 LE というI-O DATAの無料ソフトを使って 前回フルバックアップをし、今回は差分バックアップを取ろうと思っています。 そこで質問ですが、差分バックアップだと二世代前のデータは消えますか? 有料ソフトだと履歴機能がありますがこの無料ソフトだと無い、と書いてありました (この履歴機能というのが何なのかよく分かってないです)。 この無料ソフトだと一世代前のデータしか残らないのですか? 例を挙げると、元々 DataA DataB DataC という三つのファイルがあってフルバックアップしたとします(一世代目)。 そして、DataAだけ消します。 DataB DataC この二つのファイルの状態で差分バックアップをします(二世代目)。 そして、今度はDataBを消します。 DataC このDataCだけの状態で差分バックアップをします(三世代目)。 ここで「DataAがやっぱり必要だった!」となった場合、DataAを復元できますか? 他のメーカ/機種での一般的な話でも構いません。 どうか教えて下さい。お願いします。

  • (MFC)コンボボックスの値を数値比較

    VC++2005のMFCにてアプリケーションを作成しています。 コンボボックス(Ctrl変数:m_xcStMonth)に入力された値の、 正常値入力チェックとして、「1」から「12」までの数値ならtrue、 それ以外の数値及び文字列ならfalseを返す機能を実装したいのですが、 下記プログラムだと、「2」を入力しても、比較関数(1)(2)の戻り値として、 (1)RetMonth1には正常値「1」を返すのですが、 (2)RetMonth2にも誤り値「1」を返してしまいます。 原因として、「2」と「12」を比較した際に、 それぞれ一文字目の「2」と「1」を比較してしまうので、 誤り値を返してしまうようです。 下記が問題のソースコードです。 案1が比較関数にstrcpy_s()を使用した場合、 案2が比較関数CString::Compare()を使用した場合です。 両方において、RetMonth2に誤った戻り値を返しています。 もし何か良い改善策、より効率の良い実装方法などご存知の方おられましたら、 お手数ですが、ご教授お願い致します。 【案1】 CString StMinMonth; CString StMaxMonth; StMinMonth.Format( "%d", 1 ); StMaxMonth.Format( "%d", 12 ); CString StMonth; m_xcStMonth.GetWindowText( StMonth ); // コンボボックスの値を取得 char CmpMonth [ MAX_WORD_SIZE + 1 ] = ""; char CmpMinMonth[ MAX_WORD_SIZE + 1 ] = ""; char CmpMaxMonth[ MAX_WORD_SIZE + 1 ] = ""; strcpy_s( CmpMonth, MAX_WORD_SIZE + 1, StMonth ); strcpy_s( CmpMinMonth, MAX_WORD_SIZE + 1, StMinMonth ); strcpy_s( CmpMaxMonth, MAX_WORD_SIZE + 1, StMaxMonth ); int RetMonth1 = strcmp( CmpMonth, CmpMinMonth ); //(1) int RetMonth2 = strcmp( CmpMonth, CmpMaxMonth ); //(2) if( ( RetMonth1 < 0 ) || ( RetMonth2 > 0 ) ) { return false; } return true; 【案2】 CString StMinMonth; CString StMaxMonth; StMinMonth.Format( "%d", 1 ); StMaxMonth.Format( "%d", 12 ); CString StMonth; m_xcStMonth.GetWindowText( StMonth ); // コンボボックスの値を取得 int RetMonth1 = StMonth.Compare( StMinMonth ); //(1) int RetMonth2 = StMonth.Compare( StMaxMonth ); //(2) if( ( RetMonth1 < 0 ) || ( RetMonth2 > 0 ) ) { return false; } return true;

  • コンボボックス

    コンボボックスを入力不可にする時なんですけど、 コンボボックスが配列で50個あるんですけど、 ウィンドウプロパティでStyle 2-ドロップダウンリストとするのは、大変めんどくさいので、プログラムでかいたんですけど、  for i = 0 to 50    combo1(i).style = 2  next i   と書いたら”値の取得のみ可能なプロパティに値を設定することはできません”っていうエラーがでるんですけど、プログラムではどう書いたらいいんですか?