質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

3回答

4971閲覧

C# 計算のボタンを押したときに+-×÷の どのボタンを押したか判別し計算したいです。

psyren0010

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2020/09/25 01:42

C# Visual Studioで計算機のようなものを作っています。

値1値2のテキストボックスに数字を入れ
四則演算の四つのボタンの一つを押して、計算のボタンをおすと
計算結果のテキストボックスに答えが出るようにしたいです。

例)+のボタンを押し計算のボタンを押すと 足した結果が出る
-のボタンを押し計算のボタンを押すと 引いた結果がでる
計算のボタンを押したときに+-×÷の どのボタンを押したか判別し計算したいです。

分かりずらいですがこのようなデザインになっています。

値1[テキストボックス]     値2[テキストボックス]

[ボタン+] [ボタン-] [ボタン×] [ボタン÷]

計算結果[テキストボックス]

[ボタン計算]

このようにしたいです

計算のボタンを押したときに判別できるように
private void 計算_Click(object sender, EventArgs e)
{

if(+ボタン押したとき)
{
int 値1 = int.Parse(値1.Text);
int 値2 = int.Parse(値2.Text);
計算結果.Text = (値1 + 値2).ToString();
}

else if(-ボタンを押したとき) {

     int 値1 = int.Parse(値1.Text);
int 値2 = int.Parse(値2.Text);
計算結果.Text = (値1 - 値2).ToString();
}

}

このようにしたいです。

補足情報(FW/ツールのバージョンなど)

Visual Studio2019を使用しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/09/25 01:44

電卓関係はどの言語でも出尽くしているかと思いますが、調べて何も出なかったのでしょうか。 調べたこと試したことを具体的に記載してください。 あと、コードやエラーはマークダウンのcode機能を利用してご提示ください。 https://teratail.com/questions/238564
psyren0010

2020/09/25 01:52

はい。調べましたが、四則演算のボタンをおして計算のボタンを押すと答えになる。というのはなくて、計算ボタンを押したときに四則演算のボタンに合わせて計算する、ボタンのクリックに応じて違う結果になるというのがわかりません。 そもそも判別できるようにしたいと書きましたが、どのように書き込めばいいかわからないのでエラーコードもありません。すいません
m.ts10806

2020/09/25 01:55

>はい。調べましたが、 調べたことを質問本文に記載してください。 あとあくまで「コードやエラーをマークダウンで提示してほしい」という依頼であって、「エラーを提示してほしい」ではありません。 マークダウンとは文章表現の方式です。 既に見出しは使われています。 コード用もあるのです。(提示したURLでおおよそイメージは出来るはず) ヘルプにもあります。 https://teratail.com/help/question-tips#questionTips3-7 単に平で提示されると読みにくいし(インデントがない)、コピペも面倒なのです。
m.ts10806

2020/09/25 01:57

あと、現時点で 1+2×3-4÷5 みたいな計算は考慮しますか? 「計算ボタンを押す」だと理論上可能になりますが、 現在どこまで想定されているのでしょうか(設計の問題)
m.ts10806

2020/09/25 01:59

いずれも「質問本文」に記載してください。 こちらはあくまで質問への追記修正依頼のコメント欄です。 ほとんどの人は質問本文のみを見て回答するか否かを決めます。 本文に書いていないことは何も伝わらないと思ってください。
退会済みユーザー

退会済みユーザー

2020/09/25 02:38

何を作っているか(Windows Forms? WPF? ASP.NET Web Forms? その他?)と開発環境(OS は何かとそのバージョン。.NET Framework か Core どっちかとそのバージョン)ぐらいは書けませんか?
guest

回答3

0

まず手順を考えてみてはどうでしょうか?

先の方の回答でもわかるかと思いますが、「計算を押したとき選択したボタンを判別したい」ということは、計算ボタンを押す前には、どのボタンを押したのかをプログラムが判断するために、どのボタンを押したかの情報がにどこかに保存されていないといけないということです。
(計算ボタンを押した際に動くプログラムでその値を使うために…)

「計算_Click」という名前から察するに今提示なさっているコードの構成は「計算ボタン」を押したときのものだと思います。
同じように「+ボタンを押したとき」「-ボタンを押したとき」などを作って、どこかに判別するための値を保存し、その値を「計算_Click」で使うようにしてみてはどうでしょうか。
難しいことをやろうとしなくても、「計算結果」のテキストボックスのようなものを保存用にもう1つ作るなどで対応できるかと思います。

最初は分からない事ばかりだと思いますが、最初のみんなそんなものなので、安心して1つ1つ覚えていきましょう。

投稿2020/09/25 02:39

編集2020/09/25 03:34
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

このようにしたいです。

そのようにしてみましょう。
ちとなにを聞きたいのかわかってませんが、まずはあなたの思うように実装していきましょう。
そのうえで、不具合やエラーが起きたとき、それについて聞いていただければ回答ができるかと思います。

今のままではまるっきりコード作成依頼となってしまってますよ

投稿2020/09/25 02:29

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/09/25 02:41

回答になってないと思いますけど。少なくとも回答欄に書くようなことではなく、スレッドにノイズを増やしただけとしか思えません。
guest

0

とりあえず押したボタン(+-×÷)の「押した」情報をどこかに(例:WebFormであれば隠しフィールド)に持っておけば良いかと思います。

投稿2020/09/25 02:21

編集2020/09/25 03:07
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/09/25 02:35

ASP.NET Web Forms の話なのでしょうか? 質問からは読めませんでしたが。
m.ts10806

2020/09/25 02:42

そのあたりが明示されてなかったので、思うように回答してみました。 Windows.Formsの方だったらそれに準ずるものを探してもらうということで・・
退会済みユーザー

退会済みユーザー

2020/09/25 02:46 編集

> そのあたりが明示されてなかったので、思うように回答してみました。 回答する前に聞くべきではないでしょうか? 思ったことが実際と違う場合、思ったことベースで質問すると混乱を招くと思うのですが。 ASP.NET Web Forms の話だったとして「持っておけば良い」ということはどういう意味でしょう? 何を何故持っておく必要があるのでしょうか?
m.ts10806

2020/09/25 02:46

>計算のボタンを押したときに+-×÷の どのボタンを押したか判別し が要件なので、「押したボタンの情報」ですね。 追記しておきます。
Zuishin

2020/09/25 02:47

引数に sender があるので、特に隠しフィールドは必要ないように思いますが。
m.ts10806

2020/09/25 02:48

>回答する前に聞くべきではないでしょうか? 修正依頼は投げていますが、質問が修正される気配がないので、「ちゃんと書いてないとちゃんとした回答はもらえない(ヒントになりそうな情報くらいならもらえるかもしれない)」というのを伝えるべく、簡易回答にしました。 裏を返せば「きちんとした回答欲しいならちゃんと質問書いてね」です。
m.ts10806

2020/09/25 02:53 編集

Zuishinさん 私が勘違いしてるだけかもしれませんが、sender はあくまで「押したボタン自身の情報」であって、今回だと「計算ボタン」ではないですか? 数字を入力→四則どれか押す→計算ボタン押す なので、「四則どれか押す」のときに押した情報をどこかに持っておく必要があるかと思います。
退会済みユーザー

退会済みユーザー

2020/09/25 02:53

> 裏を返せば「きちんとした回答欲しいならちゃんと質問書いてね」です。 ここは質問者さん専用の Q&A サイトではなく、全ての閲覧者を含めて情報交換の場所と思っています。 https://teratail.com/help/question-tips にも書いてあります。なので、そういう回答は一般閲覧者にとって好ましくないと思うのですが。
m.ts10806

2020/09/25 02:58

SurferOnWwwさん 「全ての閲覧者を含めて情報交換の場所」というのは大いに賛同します。 ですが、発信はあくまで質問なので、質問内容が充実してなければ回答もそれなりにしかならないは仕方がない部分はあります。頑として質問を修正しない質問者もいますし、全く回答不可能であれば修正するまで私も手を出しません。 今回は全く回答不可能ではない質問内容から大きく間違った回答はしていないつもりですが、その部分あればご指摘ください。
退会済みユーザー

退会済みユーザー

2020/09/25 03:04 編集

> 大きく間違った回答はしていないつもりですが ASP.NET Web Forms の話でなければ、ASP.NET Web Forms のサーバーコントロールを紹介するのは「大きく間違った回答」です。 また、先の私のレスの「そういう回答は一般閲覧者にとって好ましくないと思うのですが」というのはオブラートに包んだ表現で、はっきり言わせていただければ少なくとも私にとっては迷惑なんです。
m.ts10806

2020/09/25 03:05

SurferOnWwwさん >オブラートに包んだ表現 コメントの意図は理解しているつもりです。 あくまで「現状の質問内容から」ですので、質問修正対応され次第、対応は考えるつもりです。 一応、決め打ちじゃない方向には調整してみます。
Zuishin

2020/09/25 03:05

四つのボタンがそれぞれの演算子に対応しているので、各ボタンのインスタンスと sender を比較すればそれで判別できるように思いました。演算される数値の方も「値1.Text」「値2.Text」で取得していますよね? または各ボタンそれぞれに別のイベントハンドラをつける方が初心者向きかもしれません。 しかし、データとしてデリゲートを持つのであれば、実は面白い方法かもしれませんね。
m.ts10806

2020/09/25 03:08

Zuishinさん >各ボタンのインスタンスと sender を比較すればそれで判別できるように思いました そういう意図ですね。勉強になります。 >各ボタンそれぞれに別のイベントハンドラをつける方が初心者向きかもしれません 確かに、これは思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問