前回は電卓のGUIと仕様を決めました。
今回は表示関係やボタンの処理をコードを見ながら解説したいと思います。
1.仕様のおさらい
ボタンを押された時の仕様をおさらいしましょう。
・数字ボタンを押された時、TextBoxへ数字を追加していく。
・演算ボタンが押された時、TextBoxに表示されている数値を内部に保持する。
この二つになります。
2.数字ボタンが押された時の処理について
まずはデザイン画面で処理を追加したいボタンをダブルクリックしましょう。
するとボタンが押された時に実行される関数が自動で作成されます。

ボタン「1」をダブルクリックした際に作成されるコード
private void button_Num1_Click(object sender, EventArgs e)
{
}こちらの自動生成されたコードに対してTextBoxへ数字のTextを追加する処理を追加しましょう。
TextBoxへの文字列の追記は
textBox1.Text += "1";これで追記できます。
実際の動きを見てみましょう。TextBoxに「0」が表示されている状態で「1」ボタンを押すと・・・

はい。確かに数字が後ろに追加されています。
仕様通りですね!
でも電卓としてはどうでしょうか?こんな電卓はないですね。
仕様通りだからと言ってこれでOKではありません。
作りたいものを理解し、その仕様に合った実装を心がけましょう。
3.表示「0」について考える。
電卓として正しい動きをしてほしいので「0」だけの時は数値ボタンが押された時
「0」を消して数値を追記しましょう。
では「0」だけ表示されていることを判定できる処理を考えましょう。
string strGetData = textBox1.Text;
if (strGetData == "0")
{
}この処理で現在TextBoxに表示されている文字列を取得でき、
「0」と完全一致しているか?の判定ができます。
この処理を数値ボタンが押された後、数値をセットする前に入れてあげれば
「0」への対策は完了です。
以下「1」が押された後です。

ばっちりですね。
4.関数化
さて先ほど「0」を判定した処理ですが、各ボタンのテキスト設定前にいれるとなると・・・
private void button_Num1_Click(object sender, EventArgs e)
{
string strGetData = textBox1.Text;
if (strGetData == "0")
{
textBox1.Text = "1";
}
else
{
textBox1.Text += "1";
}
}ぱっと見わかりづらいですね。
では先ほどの判定処理を関数化しましょう。
// 最初にボタンが押された時のチェック処理
private void DataFastSetCheck()
{
string strGetData = textBox1.Text;
if (strGetData == "0")
{
textBox1.Text = "";
}
}今回は条件に一致した場合、TextBoxの表示をクリアするようにしました。
これにより、この関数が呼ばれた後の処理が共通化できるためです。
private void button_Num1_Click(object sender, EventArgs e)
{
DataFastSetCheck();
textBox1.Text += "1";
}
private void button_Num2_Click(object sender, EventArgs e)
{
DataFastSetCheck();
textBox1.Text += "2";
}この関数については人によっては「0」だった場合戻り値でTRUEを返したりと
人によっていろいろなパターンがあると思います。
好みの実装をしましょう。
関数化したことでスッキリ見やすく、メンテナンス性もあがりましたね。
5. あとがき
今回はボタンの処理、表示関係を説明しました。
次回は演算ボタンの処理について解説したいと思います。
関連記事
-
第1回 Visual C++で作成したDLL内のクラスをC#で利用する方法
こんにちは、ILCです。 Visual C++ (以下 VC++)で作成されたDynamic...
公開日:2024.01.19 更新日:2024.01.19
tag : Windows
-
-
-
【新機能探訪】Android 13から導入された『アプリごとの言語設定』
こんにちは、KNSKです。よろしくお願いします。 今回は Android13の新機能である『...
公開日:2022.12.09 更新日:2022.12.09
tag : スマートデバイス
-
第1回 ラズパイを使用したBLE通信 ~ ディスプレイ、キーボード、マウスを接続しないで設定 前編 ~
こんにちは、GTです。よろしくお願いします。 最近業務でラズパイのBluetooth機能を使...
公開日:2021.12.24 更新日:2021.12.24
tag : Bluetooth Raspberry Pi
-
こんにちは。WwWです。 システム系の開発をしていると様々な問題が起こります。 そこで今回は...
公開日:2023.04.28 更新日:2023.04.28