位置情報で子どもの居場所をお知らせ

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
と、「選択した値」ではなく「表示していた値」を取得してしまいます。

何か解決策はございますでしょうか。

宜しくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

> m_combo_year.GetWindowText(strComboYear);


m_Combo_year.GetLBText(m_Combo_year.GetCurSel(), strComboYear);
    • good
    • 1
この回答へのお礼

素早い御回答ありがとうございます!
無事できました!

お礼日時:2007/05/28 13:04

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qコンボボックスの値がうまく取得出来ません。

VC++ MFCを使用しています。

コンボボックスのリストから項目が選択されるたびに
その値を元にリストを更新しようとしているのですが、

コンボボックスのリストが変更されたイベント
OnCbnSelchangeComboAlmselect()
の中で現在の表示値を
m_comBoxAlmSelect.GetWindowText(str);
で取得しているのですが、
strに最新の値ではなく、選択する前の値が取得されてしまいます。

使用するイベントを間違えているのでしょうか?

Aベストアンサー

同様の質問があります。
参考URLを参照してください。

参考URL:http://okwave.jp/qa3037033.html

Qコンボボックスでデフォルト値の設定

コンボボックスのデフォルト値を設定しようとして
以下のコードを書いたのですが、コンパイルがとおり
ません。どうしたらよいでしょうか?

private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
//費目初期値
array<System::String^>^himokudata = {
"通信費","光熱費","住居費"
};

for (int i=0; i < himokudata->Length; i++) {
comboBox1->Items->Add(himokudata[i]);
}

comboBox1->Text = comboBox1->Items->default;
<---ここが通らない。textに表示されるデフォルト
値として通信費を入れたいのだが
}

Aベストアンサー

comboBox1->SelectedIndex = 0;

QCStringからchar*への型変換について教えてください。

以前の質問に

int型 → CString型/char型

がありましたが、

CString型をchar*型に変換する方法を
教えていただければありがたいです。

MSDNで「LPCTSTRキャスト」が説明されていましたが、
例が載ってないのでよくわかりませんでした。

よろしくお願いします。

Aベストアンサー

目的にもよりますが一時的にchar配列として使いたいならCString::GetBuffer()が利用できます。
char配列としての利用が終わったらCString::ReleaseBuffer()する必要がありますが。

直接CString内の文字列を扱う必要があるならCString::operator LPCTSTRで文字列ポインタが得られます。
ただし、CStringオブジェクトをいじると無効ポインタなる可能性があるので気をつけてください。

MSDNのMicrosoft Foundation Classリファレンス→CString→クラスメンバで確認してください。

Q【C++/CLI】コンボボックスの値を取得したい

VC++2005の.NETで言語はC++/CLIにてアプリを作成しています。

コンボボックスに下記値が挿入されています。

aaa
bbb

インデックス「1」を指定して、「bbb」の文字列を、
String型で取得したいのですが、方法が分かりません。
素人ながら、下記コードも試してみましたが、検討違いでした。

String^ str = this->cmbTest->GetItemText( 1 );

初歩的な質問で申し訳ないですが、
方法をご存知の方、ご教示お願い致します。

Aベストアンサー

#1は、コンボボックスアイテムが文字列の場合を想定していますが、それ以外だとコケる可能性があります。

文字列かどうかわからない場合は、以下のコードの方がよいかも?

String^ str = this->cmbTest->SelectedItem->ToString();

Q【C++/CLI.NET】コンボボックスの値の設定・取得

VC++2005の.NET、言語はC++/CLIでアプリを作成しています。
コンボボックスについて、質問が二点あります。

(1)
コンボボックスのItemsプロパティにて下記値をセットし、

【セットした値】
aaa
bbb
ccc

アプリ実行時に、コンボボックスの初期表示として、
二番目の値「bbb」を表示させたいのですが、
方法が分かりません。

(2)
あるタイミングで、コンボボックスの現在選択されている値が、
何番目の値かを取得する方法が分かりません。

例)bbbが選択されているなら、二番目。


あと、当方.NET学習中であり、コンボボックスのような基本コントロールの使い方を解説したサイトや、
Tipsなど、おすすめサイトも一緒に教えて頂けると非常に助かります。

よろしくお願い致します。

Aベストアンサー

(1) コンボボックスのSelectedIndexプロパティに表示したいアイテムのインデックスを競ってしてください。(「bbb」なら1とか)
他のプロパティの設定にもよりますが、-1を設定すると「選択なし」状態になります。

(2) これもコンボボックスのSelectedIndexプロパティを参照すればインデックスが取得できます。(「bbb」なら1とか)

MSDNを検索すると、一応項目一覧とかは出てきますが、VC++ CLRだと使い方などはあまりヒットしませんねぇ・・・

参考URL:http://msdn.microsoft.com/ja-jp/library/system.windows.forms.combobox_members.aspx

Qコンボボックスのドロップダウンリストが表示されない

MFCでアプリを作成、アプリの画面上にコンボボックスのリソースを貼り付け、アプリ起動直後は、コンボボックスのドロップダウンリストを表示できています。
しかし、アプリ画面のサイズを変更すると、▼ボタンを押下しても、ドロップダウンリストが表示されなくなってしまいます。
アプリ画面のサイズを変更後も、コンボボックスのドロップダウンリストを表示できるようにする方法を教えてください。

Aベストアンサー

もし、コンボボックスのサイズ変更をMoveWindowでやっているなら、これで表示されるのは、リスト部分を含むサイズです。
たとえば、
m_combobox1.MoveWindow(20,20,200,300);
の300は、リスト部分を含みます。

エディット部分の高さを変更させる場合は、
m_combobox1.SetItemHeight( -1, 100);
というようにします。

普段、意識していないので、コンボボックスを貼り付けてみましたが、マウスでは、エディット部分の高さは変えられないようです。
ダイアログエディタ(リソースビューのコントロールを貼り付けるフォーム)で、▼ボタンを押下させると、点線と四角で囲まれた部分が表示されます。
(コンボボックスの絵とは違う部分が囲まれるはず)
その下辺をウニ~とドラッグすると、リスト部分の高さが変わります。

MDI・SDI・ダイアログベースいずれでも同じです。

QUpdateData( FALSE); による文字列データの表示更新(VC++6.0)

VC++の超初心者です.

UpdateData( FALSE );
を用いてエディットボックスの文字列の表示の更新を
試みているのですが,たとえば,以下のコードのようにボタンをクリックした際に文字列表示の更新を複数回行おうとするとうまくいきません.
具体的には一回目のUpdateData( FALSE );が反映されず二回目のUpdateData( FALSE );のみ反映されるという症状です.

なおm_mojiretsuはCstring型でエディットボックスのDDX用の変数です.

void CMyDlg::OnButton1()
{
DWORD p;

m_mojiretsu=_T("mojirstu1");
UpdateData( FALSE );

/*5秒の待ち*/
p=timeGetTime();
while(1){if((timeGetTime()-p)>5000) break;}

m_mojiretsu=_T("mojirstu1\r\nmojirstu2");
UpdateData( FALSE );

}


何か別の処理を行わなければいけないのでしょうか.
どこかに根本的なミスがあるのでしょうか.

VC歴3日程度で,右も左も分からず大変困っております.よろしくお願いします.

VC++の超初心者です.

UpdateData( FALSE );
を用いてエディットボックスの文字列の表示の更新を
試みているのですが,たとえば,以下のコードのようにボタンをクリックした際に文字列表示の更新を複数回行おうとするとうまくいきません.
具体的には一回目のUpdateData( FALSE );が反映されず二回目のUpdateData( FALSE );のみ反映されるという症状です.

なおm_mojiretsuはCstring型でエディットボックスのDDX用の変数です.

void CMyDlg::OnButton1()
{
DWORD p;

m_mojiretsu=_T("mojirst...続きを読む

Aベストアンサー

m_mojiretsu=_T("mojiretsu1");
UpdateData(FALSE);
UpdateWindow(); // <- これを追加

/*5秒の待ち*/
...

とすれば、ひとまず期待どおりの動作になると思います。

# こうするよりは、OnButton1() では変数を書き換えるべしと言う
# 自前のコマンドメッセージを投げるだけで、すぐに戻った方が
# お行儀は良いのですが...
# そこいらへんは追々調べたり試したりしてみて下さい。

QCString から LPCTSTRの型に変換

visual studio 2013 VC++を使用していますが、WINDOWSの関数に渡すためにCString からLPCTSTRに変換する必要があります。実際にどのようにするのかわかりません。
例えば、以下のサンプルは他の質問コーナーの回答をアレンジしたものです

CString str = _T("ABC");
int siz = str.GetLength()+1;
LPCTSTR pszFName = new TCHAR[siz];
_tcscpy_s( pszFName, siz, str );

で変換するのですが
LPCTSTRからwchar_t*へ変換できませんとエラーがでます
_tcscpy_s()は使用できないのでしょうか

Aベストアンサー

>APIはCStdioFile の Open()でファイル名を与えるところ

APIではないようですが……。

http://msdn.microsoft.com/ja-jp/library/ee247566.aspx
ならば、そのままCStringの変数渡せば、よろしく処理してくれると思いますけど。

QCStringのFindで文字列検索を行いたいのですが

こんにちは。
いつもお世話になっております。

CStringのFindメソッドで文字列検索を行っているのですが、文字列ではなくコードで検索が行われてしまい困っています。
-------------------------------------------------------

CString TargetStr;

TargetStr = "ハヒフヘホ";
if(TargetStr.Find("z", 1) != -1){
return FALSE;
}

-------------------------------------------------------

上記で文字"ホ"のコードが「837A」で"z"が「7A」のため、
文字列が存在するという結果が帰ってきます。
コードではなく文字そのものの検索をするにはどうしたらよいでしょうか?
基本的なことで申し訳ありませんが、ご教示下さい。

<環境>
Windows 2000, VC6.0

Aベストアンサー

CString::Findメソッドは、1バイトごとの検索を行うので、そのような結果になってしまいます。

このような処理を避けるには、CString::Findではなく、_mbsstrを利用します。
詳しくは、MSDNを参照のこと。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vclib/html/_crt_strstr.2c_.wcsstr.2c_._mbsstr.asp

どちらかといえば、_tcsstrを利用してUnicodeとMBCSの両方に対応できるようにしておいたほうがいいです。
#この場合、_UNICODEもしくは_MBCSのどちらかが設定されていないと正しく動きません。

*注意*
この関数はANSIに互換性がないようですので、Windows以外では利用できない可能性があります。


また、上記のような関数を使わず、自分で実装するなら、以下の参考URLを参考にしてください。

参考URL:シフトJIS文字列の文字検索

参考URL:http://katsura-kotonoha.sakura.ne.jp/prog/c/tip0002d.shtml

CString::Findメソッドは、1バイトごとの検索を行うので、そのような結果になってしまいます。

このような処理を避けるには、CString::Findではなく、_mbsstrを利用します。
詳しくは、MSDNを参照のこと。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vclib/html/_crt_strstr.2c_.wcsstr.2c_._mbsstr.asp

どちらかといえば、_tcsstrを利用してUnicodeとMBCSの両方に対応できるようにしておいたほうがいいです。
#この場合、_UNICODEもしくは_MBCSのどちらかが設定されていないと...続きを読む

QMFCでコンボボックスを選択不可状態にしたい

ダイアログ上にあるコンボボックスを選択不可状態にしたいのですが、
良い方法が見つかりません。
どなたか良い方法ご存知でしたら、ご教授お願い致します。

なお、この場合の選択不可とは、
コンボボックス上でクリックしても、
プルダウンされず、何も反応しないことを指します。
またコンボボックスのTypeは、ドロップダウンにて作成しています。

開発環境は、VC++2005です。
また、当方MFC経験2ヶ月程度の初心者ですので、
なるべく分かりやすい解説いただけると幸いです。

お手数ですが、御回答お願いいたします。

Aベストアンサー

CWnd::GetDlgItem()でコンボボックスのオブジェクトを取得し、
http://msdn.microsoft.com/ja-jp/library/77d16yhw(VS.80).aspx

CWnd::EnableWindow()で使用不可にする、
http://msdn.microsoft.com/ja-jp/library/5kbfsahf(VS.80).aspx

で行けるかと思います。
#MFC環境ないんで検証してません


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング