人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

? 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";
}
}
}
以上となります。宜しくお願い致します。

●質問者: yasutaka-tanaka
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● freemann
●500ポイント ベストアンサー

先ほどはすみません。

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

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;
 }
 }
 }
 }
}

yasutaka-tanakaさんのコメント
再度回答して頂き、誠に有難うございます! ご丁寧にソースまで有難うございます。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ