IT未経験者です。
研修でC#を使い電卓の作成をしています。
どうしても分からないところがあり、どなたか教えていただけると助かります。分からないところとして、
結果のみResultTextに表示しており、もう一つTextBoxを追加し途中の計算式も表示させたいです。
(イメージとしてwindowsの電卓アプリのような動作にしたい。)
(まだ二つ目のTextBoxは追加していません。四則演算のイベント内に記述するのはわかるのですが、中々、上手くいきません。)
長くなりますがコードを載せますので是非、教えていただきたいです。(コードのおかしい部分などもご指摘ください。)
補足として、環境 VisualStdio ASP.NET Webアプリケーション(.NET Framwork) Webフォーム.aspx で作っています。
上記環境だと変数の値がページロードで0になるので、HiddenFieldを使って値を保持しています。
public partial class DendroForm : System.Web.UI.Page { /// <summary> /// 値の追加、判定に使用 /// </summary> const string ZERO = "0"; /// <summary> /// 小数点の追加、判定に使用 /// </summary> const string DECIMAL_POINT = "."; /// <summary> /// 演算子を判定するのに使用 /// </summary> const string PLUS = "+"; const string MINUS = "-"; const string MUL = "×"; const string DIV = "÷"; /// <summary> /// =ボタンが が押されたかの判定に使用 /// </summary> const string EQUAL = "="; /// <summary> /// Cボタンが押されたかの判定に使用 /// </summary> const string CLEAR = "C"; /// <summary> /// CEボタンが押されたかの判定に使用 /// </summary> const string CE = "CE"; /// <summary> /// 桁数制限の設定に使用 /// </summary> const string NUM_DIGITS = "{0:#,0.###############}"; /// <summary> /// 入力制限に使用 /// </summary> const int NUM_LENGTH = 15; protected void Page_Load(object sender, EventArgs e) { } /// <summary> /// 数値の入力イベント処理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Num_Click(object sender, EventArgs e) { Button nbtn = (Button)sender; // Hnum → 入力された値を格納 // 入力できる桁数を制限 if (Hnum.Value.Length <= NUM_LENGTH) { // Hnumの値が0か判定 if(Hnum.Value == ZERO) { Hnum.Value = nbtn.Text; } else { Hnum.Value += nbtn.Text; } } // Hnumの値を表示 ResultText.Text = string.Format(NUM_DIGITS, decimal.Parse(Hnum.Value)); } /// <summary> /// 小数点ボタンのイベント /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Dot_Click(object sender, EventArgs e) { // Hnumに小数点があるか判定 if (Hnum.Value.Contains(DECIMAL_POINT)) { return; } else { // Hnumに値があるか判定 if (Hnum.Value == string.Empty) { Hnum.Value = ZERO + DECIMAL_POINT; } else { Hnum.Value += DECIMAL_POINT; } // Text.Boxへの表示 ResultText.Text = string.Format(NUM_DIGITS, decimal.Parse(Hnum.Value)) + DECIMAL_POINT; } } /// <summary> /// 四則演算のイベント処理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Calculation(object sender, EventArgs e) { Button cabtn = (Button)sender; decimal num = decimal.Parse(Hresult.Value); decimal num2; try { // Hnum(入力された値)の値の判定 if (Hnum.Value != string.Empty) { // Henzanshiの値と同じ演算子の計算 num2 = decimal.Parse(Hnum.Value); if (Henzanshi.Value == PLUS) { Hresult.Value = (num + num2).ToString(); } else if (Henzanshi.Value == MINUS) { Hresult.Value = (num - num2).ToString(); } else if (Henzanshi.Value == MUL) { Hresult.Value = (num * num2).ToString(); } else if (Henzanshi.Value == DIV) { Hresult.Value = (num / num2).ToString(); } else if (Henzanshi.Value == string.Empty) { Hresult.Value = num2.ToString(); } // Hnum2に入力されている値を格納 Hnum2.Value = Hnum.Value; } else { // イコールが連続で押されたとき if (cabtn.Text == EQUAL) { // Henzsnshi2の値と同じ演算子の計算 num2 = decimal.Parse(Hnum2.Value); if (Henzanshi2.Value == PLUS) { Hresult.Value = (num + num2).ToString(); } else if (Henzanshi2.Value == MINUS) { Hresult.Value = (num - num2).ToString(); } else if (Henzanshi2.Value == MUL) { Hresult.Value = (num * num2).ToString(); } else if (Henzanshi2.Value == DIV) { Hresult.Value = (num / num2).ToString(); } } } // 押された演算子を格納 Henzanshi.Value = cabtn.Text; Keisan.Text = Keisan.Text + Hnum.Value; Hnum.Value = string.Empty; if (Hkeisanflag.Value == "true") { string str = Keisan.Text = Keisan.Text.Remove(Keisan.Text.Length - 1); Keisan.Text = str + Henzanshi.Value; } else { Keisan.Text += Henzanshi.Value; Hkeisanflag.Value = "true"; } // 格納された演算子が = だった場合の判定 if (Henzanshi.Value == EQUAL) { Henzanshi.Value = string.Empty; } else { Henzanshi2.Value = Henzanshi.Value; } // 計算結果の表示 ResultText.Text = string.Format(NUM_DIGITS, decimal.Parse(Hresult.Value)); // Hnum(入力された値)をリセット Hnum.Value = string.Empty; } // 0除算エラー処理 catch (DivideByZeroException ex) { ResultText.Text = ex.Message; Hresult.Value = ZERO; Henzanshi.Value = string.Empty; Henzanshi2.Value = string.Empty; } // decimal型のオーバーフロー処理 catch(OverflowException ex) { ResultText.Text = ex.Message; Hresult.Value = ZERO; Henzanshi.Value = string.Empty; Henzanshi2.Value = string.Empty; } }
あなたの回答
tips
プレビュー