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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Re

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

#1

投稿記事 by Re » 10年前

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 ^' は、この演算子または定義済の演算子に適切な型への変換の定義を行いません。」と表示されます。
何か別の記述方法はありますでしょうか?よろしくお願いします

アバター
milfeulle
記事: 47
登録日時: 10年前
住所: マリーランド
連絡を取る:

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

#2

投稿記事 by milfeulle » 10年前

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

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

#3

投稿記事 by Re » 10年前

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

閉鎖

“C言語何でも質問掲示板” へ戻る