ページ 11

C++WFCでカウンターを作りたい

Posted: 2014年2月25日(火) 02:35
by Re
C++2010で画像をクリックするとテキストボックス内の数値が増減するプログラムを組みたいのですがクリック時の計算式の作り方が全く分からずエラーが発生します

コード:

private: System::Void pictureBox1_MouseDown(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e)
 {
if (e->Button == System::Windows::Forms::MouseButtons::Left)
{
int::Parse(textBox1->Text) = int::Parse(textBox1->Text) - 1;
}
この状態で読み込むと「error C2106: '=' : 左のオペランドが、左辺値になっていません。」
と表示され
textBox1->Text = textBox1->Text - 1;
だと「error C2676: 二項演算子 '-' : 'System::String ^' は、この演算子または定義済の演算子に適切な型への変換の定義を行いません。」と表示されます。
何か別の記述方法はありますでしょうか?よろしくお願いします

Re: C++WFCでカウンターを作りたい

Posted: 2014年2月25日(火) 07:53
by milfeulle
C++WFCを使ったことがないので詳細は分からないのですが、

コード:

int::Parse(textBox1->Text) = int::Parse(textBox1->Text) - 1;
は簡単に言うと「1 = 2」のような記述をしています。関数(Parse)の戻り値は右辺値(prvalue)として扱われ、代入できません。

一方、

コード:

textBox1->Text = textBox1->Text - 1;
は、textBox1->Textが文字列(String^)であるのに、これに引き算をしようとしています。簡単に言うと「"3" - 2」などはできません。

おそらく、「int::Parse(textBox1->Text) - 1」は正しく計算されていると考えられるので、これを文字列に変換してtextBox1->Textに入れてあげればいいと思います。

コード:

textBox1->Text = (int::Parse(textBox1->Text) - 1).ToString();
みたいな感じでどうでしょう? (C++/CLIは使ったことがないので見当違いかもしれません、ごめんなさい。)

# 蛇足ながら、数値以外のものが入力される可能性も考慮した方がいいかもしれません。そのような心配がなければ、カウント用の変数を用意してこちらを増減させた後にテキストボックスに反映させた方がいいかもしれません。

Re: C++WFCでカウンターを作りたい

Posted: 2014年2月25日(火) 16:09
by Re
milfeulleさん返信ありがとうございます。
書いていただいたコードを記述したところうまく動作してくれました。
stringに再変換するには.ToString()を使えば良かったのですね...
しかも式一つ一つ説明していただいて...
本当にありがとうございました!