多趣味まるの日常

跡取り息子を辞めたスーパー多趣味人間の日常や便利アイテムの紹介

C#で電卓を作る(1+2=12??)

おはようございます。まるです。

 

 

先程は日記をあげましたがこの記事では健忘録も兼ねて、なにで困ったのかについてもっと掘り下げていきます。

 

 

そもそも私は入社前まで、0から全てを書いていくんだと思っていました。

 

 

ところが実際は超便利ツールがあったのです。

 

 

マイクロソフトVisual Studio 2019というやつなのですが、これが超便利。

 

 

なにが便利かって、あらかじめボタンとか、テキストボックスと言ったものが用意されているんです。

 

 

なのでそれらをまずファームという画面(アプリとかを立ち上げた時の画面でまっさら状態)に配置して、それに命令文を書いていくだけ!

 

 

だけ、と言いましてもそれが難しいと感じる人もいるんでしょうね。

 

 

わたしはエクセルがすこし使えたため、はじめの印象はエクセルの応用みたいだなと感じました。

 

 

ハードルの高さが100mくらい下がった思いでした。

 

 

まずはじめにやったことは、ボタン一つとテキストボックス二つを置いて、テキストボックスの文字二つを足すという練習でした。

 

つまり、テキストボックス1に「あ」、テキストボックス2に「い」をいれて、ボタンを押すと「あい」になるようにしなさいというもの。

 

これは非常に簡単でした。

 

lblDisplay.Text=txtBoxA.Text + txtBoxB.Text;

日本語に直すと、

 

ラベル(lblDisplay)にテキストボックスA(txtBoxA)とテキストボックスB(txtBoxB)の文字を足して(+)代入(=)する。

 

エクセルやったことある人にはすんなり受け入れられるコードじゃないでしょうか。

 

ともあれこういうことを応用して電卓を作っていくわけです。

 

 

電卓の話にやっと入ります。

 

 

まず初めに電卓ですので1-9の数字と、+-*/と=の配置をしました。

 

 

そしてそれらのボタンが押された時に、数字を表示するディスプレイ(テキストボックス)を置きました。

 

 

で、電卓がやることといえば

 

1+2=3

 

といった計算ですよね。

 

 

ここで一つ目の壁にあたります。

 

 

1と2を、テキストボックスは「テキスト」と解釈します。

 

なので先程の「あい」の式を入れてしまうと、

 

txtDisplay.Text = btn1.Text + btn2.Text;

(名前はまずなんでもいいんですが、テキストボックスのテキストは、ボタン1のテキストとボタン2のテキストを足したものを代入するという意味)

 

となるわけですが、結果はなんとなくお察しの通りでして、「12」となってしまうのです。

 

そうつまりまず1と2を数字として認識させる必要があるんです。

 

これはエクセルと違うところですよね。エクセルなら入れれば勝手に計算してくれますから。

 

で、どうやって直すかというと、

 

 

txtDiplay.Text = (decimal.Parse(btn1.Text)+decimal.Parse(btn.Text)).ToString();

 

となります。

 

 

はいいきなりちんぷんかんぷんですよねー。

 

なので日本語にします。

 

 

テキストディスプレイ(txtDisplay) のテキスト(.Text)は、10進数(decimal)にした(Parse)ボタン1(btn1)のテキスト(.Text)と、10進数にしたボタン2(btn2)のテキストを足して、文字に直して(ToString)代入(=)する。

 

となります。

 

 

いみわかりますか??わからないですよね。

 

 

そもそもテキストボックスに表示するものを数字だけにすればいいじゃんとか、「ボタン1.テキスト」じゃなくて『ボタン.数字」とかしたらええやんけ!ってなりません!?(もしかするとそうすることもできるのかもしれない。判明したら更新します)

 

 

これらの問題がなんで起こるのかと言えば、テキストボックスに表示できるものは文字、と定義されてしまっているからなんですね。

 

なのでいちいち計算するときだけ数字に直して(decimalを使いますがintでもとりあえずは可。ただ小数点の計算するときに困る)、表示するために戻す(ToString)必要があるんですよね。

 

 

でもまあこれはそういうもんだとすんなりとりあえず受け入れられました。

 

 

何故なら日本語に直せるから。

 

 

私は大学で英語を専攻してましたので、日本語を英語に直すとか、そういう作業に若干慣れがありました。

 

 

なのでちょっとプラグラマー向いてるのかもしれません。

 

 

最初にぶつかった壁についてでした。