④ private void btn9_Click(object sender, EventArgs e)

{
OSUnum(9);
}

private void btntasu_Click(object sender, EventArgs e)
{
}
private void btnikooru_Click(object sender, EventArgs e)
{
}
private void btnC_Click(object sender, EventArgs e)
{
//各変数をリセット
dblMaeNumber = 0;
dblAtoNumber = 0;
lastKeyFlag = true;
initializeFlag = true;
prevFlag = false;

//0を表示
textBox1.Text = "0";
}
}
}
以上となります。宜しくお願い致します。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/06/14 16:16:01
  • 終了:2012/06/14 23:37:57

ベストアンサー

id:freemann No.1

freemann回答回数304ベストアンサー獲得回数472012/06/14 21:04:19

ポイント500pt

先ほどはすみません。

こんな感じでどうでしょうか。

namespace dentakuSSS
{
    public partial class Form1 : Form
    {

        //テキストボックスに
        double? dblMaeNumber; //実数型(double) を用いて、計算される値(テキストボックスに入力された、以前の数値)
        double? dblAtoNumber; //実数型(double) を用いて、計算する値(テキストボックスに入力された、現在の数値)
        double? ablkotaeNumber;//実数型(double) を用いて、答えの値


        //bool(true or falseの値を持つ変数)を用いる  
        bool lastKeyFlag = true; //演算子が押下される前に押されたキーの状態(数値ならtrue)
        bool initializeFlag = true; //初期状態フラグ(trueだと初期状態)
        bool prevFlag = false; //記憶数値があるかどうか

        //追加
        //演算の種類を表すEnum
        enum Enzan { none, add, subtract, divide, multiplu };
        //押された演算を表す
        Enzan en = Enzan.none;
        //直前に演算が押されたか(trueなら直前に演算が押された)
        bool lastEnzan = false;

        public Form1()
        {
            InitializeComponent();
        }

        double Add(double a, double b)
        {
            return a + b;
        }

        double Subtract(double a, double b)
        {
            return a - b;
        }

        double Multiple(double a, double b)
        {
            return a * b;
        }

        double Divide(double a, double b)
        {
            if (b == 0d)
            {
                MessageBox.Show("0で除算しようとしました。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return 0;
            }
            return a / b;
        }

        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            switch (e.KeyChar)
            {
                case '+':
                    en = Enzan.add;
                    dblMaeNumber = Convert.ToDouble(textBox1.Text);
                    lastEnzan = true;
                    e.Handled = true;
                    break;
                case '-':
                    en = Enzan.subtract;
                    dblMaeNumber = Convert.ToDouble(textBox1.Text);
                    lastEnzan = true; 
                    e.Handled = true;
                    break;

                case '/':
                    en = Enzan.divide;
                    dblMaeNumber = Convert.ToDouble(textBox1.Text);
                    lastEnzan = true; 
                    e.Handled = true;
                    break;

                case '*':
                    en = Enzan.multiplu;
                    dblMaeNumber = Convert.ToDouble(textBox1.Text);
                    lastEnzan = true; 
                    e.Handled = true;
                    break;

                default:
                    if (lastEnzan)
                    {
                        textBox1.Text = "";
                    }
                    lastEnzan = false;
                    break;
            }

        }

        private void btnCalc_Click(object sender, EventArgs e)
        {
            if (en != Enzan.none)
            {
                if (dblMaeNumber != null && lastEnzan == false)
                {
                    dblAtoNumber = Convert.ToDouble(textBox1.Text);
                    switch (en)
                    {
                        case Enzan.add:
                            ablkotaeNumber = this.Add((double)dblMaeNumber, (double)dblAtoNumber);
                            break;
                        case Enzan.subtract:
                            ablkotaeNumber = this.Subtract((double)dblMaeNumber, (double)dblAtoNumber);
                            break;
                        case Enzan.divide:
                            ablkotaeNumber = this.Divide((double)dblMaeNumber, (double)dblAtoNumber);
                            break;
                        case Enzan.multiplu:
                            ablkotaeNumber = this.Multiple((double)dblMaeNumber, (double)dblAtoNumber);
                            break;
                    }

                    this.textBox1.Text = ablkotaeNumber.ToString();

                    dblAtoNumber = null;
                    dblMaeNumber = ablkotaeNumber;
                }
            }
        }
    }
}
id:yasutaka-tanaka

再度回答して頂き、誠に有難うございます!
ご丁寧にソースまで有難うございます。

2012/06/14 23:44:23

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません