C#を使って何か作ろう~電卓その3~

昨日に引き続き電卓の改良だ。
なんか改良したいことがあったはずなんだけど今日開いたら忘れちゃってた…
とりあえず、機能面を少しと、「これ一個のメソッドにまとめればいいじゃん」と思ったところをまとめた。

変えたところ1:gettovalをオーバーロードした
gettovalメソッドだが、その後に続く処理が変数一つしか変わらなかったので、引数があるときは続く処理も同じメソッドに混ぜ込んだ。
変えたところ2:キー入力時の処理は一つのメソッドにまとめた
「キー入力→キークリック時のメソッド呼び出し」としていたのだが、キークリック時のメソッドが数値以外まったく一緒だったので一まとめにした。
今は入力された値毎に別名メソッドになっているがここのところもっときれいに書けそうだな…

ということで、見た目上は変化なしだが、内部は幾分すっきりした。

本当は継承とかをつかってもっときれいにしたいのだが、やり方がよく分からず…0:00以降は寝ると決めているので今日はここまでにしよう。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Calculator
{
    public partial class Form1 : Form
    {
        double val1 = 0;
        double val2 = 0;
        int calcflug = 0;
        public Form1()
        {
            InitializeComponent();
            //this.ActiveControl = this.equal;
        }

        public void EnteringKey(int i)
        {
            if (display.Text == "0")
            {
                display.Text = "";
            }
            display.Text += i;
        }

        public void gettoval()
        {
            val2 = double.Parse(display.Text);
            calcnow(val2);
            display.Text = "0";
        }
        public void gettoval(int i)//オーバーロード
        {
            val2 = double.Parse(display.Text);
            calcnow(val2);
            display.Text = "0";
            calcflug = i;
        }

        private void zero_Click(object sender, EventArgs e)
        {
            EnteringKey(0);
        }

        private void one_Click(object sender, EventArgs e)
        {
            EnteringKey(1);
        }

        private void two_Click(object sender, EventArgs e)
        {
            EnteringKey(2);
        }

        private void three_Click(object sender, EventArgs e)
        {
            EnteringKey(3);
        }

        private void four_Click(object sender, EventArgs e)
        {
            EnteringKey(4);
        }

        private void five_Click(object sender, EventArgs e)
        {
            EnteringKey(5);
        }

        private void six_Click(object sender, EventArgs e)
        {
            EnteringKey(6);
        }

        private void seven_Click(object sender, EventArgs e)
        {
            EnteringKey(7);
        }

        private void eight_Click(object sender, EventArgs e)
        {
            EnteringKey(8);
        }

        private void nine_Click(object sender, EventArgs e)
        {
            EnteringKey(9);
        }

        private void plusminus_Click(object sender, EventArgs e)
        {
            if (int.Parse(display.Text) != 0)
            {
                double num = double.Parse(display.Text) * -1;
                display.Text = num.ToString() + '-';
            }
        }

        private void dot_Click(object sender, EventArgs e)
        {
            if (display.Text.IndexOf(".") == -1)
            {
                display.Text += ".";
            }
        }

        private void add_Click(object sender, EventArgs e)
        {
            gettoval(1);
        }

        private void substract_Click(object sender, EventArgs e)
        {
            gettoval(2);
        }

        private void multiply_Click(object sender, EventArgs e)
        {
            gettoval(3);
        }

        private void divide_Click(object sender, EventArgs e)
        {
            gettoval(4);
        }

        private void equal_Click(object sender, EventArgs e)
        {
            gettoval();
            display.Text = val1.ToString();
        }

        private void allclear_Click(object sender, EventArgs e)
        {
            display.Text = "0";
        }

        public void calcnow(double val2)
        {
            switch (calcflug)
            {
                case 0:
                    val1 = val2;
                    break;
                case 1:
                    val1 += val2;
                    break;
                case 2:
                    val1 -= val2;
                    break;
                case 3:
                    val1 *= val2;
                    break;
                case 4:
                    val1 /= val2;
                    break;
            }
            val2 = 0;
            calcflug = 0;
        }

        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.NumPad0:
                    zero_Click(sender, e);
                    break;
                case Keys.NumPad1:
                    one_Click(sender,e);
                    break;
                case Keys.NumPad2:
                    two_Click(sender, e);
                    break;
                case Keys.NumPad3:
                    three_Click(sender, e);
                    break;
                case Keys.NumPad4:
                    four_Click(sender, e);
                    break;
                case Keys.NumPad5:
                    five_Click(sender, e);
                    break;
                case Keys.NumPad6:
                    six_Click(sender, e);
                    break;
                case Keys.NumPad7:
                    seven_Click(sender, e);
                    break;
                case Keys.NumPad8:
                    eight_Click(sender, e);
                    break;
                case Keys.NumPad9:
                    nine_Click(sender, e);
                    break;
                case Keys.Add:
                    add_Click(sender, e);
                    break;
                case Keys.Subtract:
                    substract_Click(sender, e);
                    break;
                case Keys.Multiply:
                    multiply_Click(sender, e);
                    break;
                case Keys.Divide:
                    divide_Click(sender, e);
                    break;
                case Keys.Decimal:
                    dot_Click(sender, e);
                    break;
                case Keys.Enter:
                    equal_Click(sender, e);
                    break;
                case Keys.Delete:
                    allclear_Click(sender, e);
                    break;
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
    }

}