// 演算子ボタン #region // equal Click private void equalBtn_Click(object sender, EventArgs e) { if (MyDetection.IsErrorMsg(display) == false) { // 前回の入力が=ではない if (beforInput != Common.EQUAL) { // クリア後最初は別処理 if (operatorStorage == '\0') { calcBuff = decimal.Parse(display); } // 前回の入力が演算子 else if (MyDetection.IsValue(beforInput) == false) { calcBuff = decimal.Parse(display); } // 前回の入力された演算子がイコール else if (beforOperator == Common.EQUAL) { } // それ以外は基本的に表示している文字列を計算用バッファに入れてから演算処理を行う else { calcBuff = decimal.Parse(display); } } Calculate(Common.EQUAL); // 演算処理 } }
// Back Click private void backBtn_Click(object sender, EventArgs e) { // エラーメッセージが表示されていない場合 if (MyDetection.IsErrorMsg(display) == false) { // 前回の入力が数字のときのみ消す if (MyDetection.IsValue(beforInput) == true) { display = display.Replace(",", ""); // 桁区切り用 display = CalcManager.DownDigit(display, ref isDot); // 桁下げ display = CalcManager.ThousandSeparator(isSeparat, display); resultTxt.Text = display; } } }
/// <summary> /// 桁上げ /// </summary> /// <param name="str">桁上げしたい文字列</param> /// <param name="upVal">桁上げする数字</param> /// <param name="beforInput">前回入力された内容</param> /// <param name="isDot">小数点フラグ</param> /// <returns>桁上げした文字列</returns> public static String UpDigit(String str, String upVal, ref char beforInput, Boolean isDot) { String work = str; // 今表示されている文字列をワークに格納 // 前回の入力が演算子かどうか if (MyDetection.IsValue(beforInput) == false && beforInput != '\0') { // 小数点フラグがONか if (isDot == true) { work += upVal; // ワークに追加したい数字を追加 } else { work = String.Empty; // ワークを初期化 work += upVal + '.'; // 今回の内容を保存 } } else { // 桁数チェック(桁数を超えていたら何もしない) if (work.Length != Common.DIGIT_MAX) { // 小数点フラグのチェック if (isDot == true) { // 小数点がついている場合はそのまま追加 work += upVal; } else { // 表示している文字列が 0. の場合は押された数字.を表示 if (MyDetection.IsCalcFormat(work) == true) { work = upVal + '.'; } else { // 小数点もついておらず表示している文字列も 0. じゃない場合は桁上げ処理を行う work = work.Insert(work.Length - 1, upVal); // .を考慮している } } } } beforInput = Char.Parse(upVal); return(work); }
// その他のボタン #region // dot Click private void dotBtn_Click(object sender, EventArgs e) { // エラーメッセージが表示されているかどうか if (MyDetection.IsErrorMsg(display) == false) { // 前回の入力が数字かどうか判定 if (MyDetection.IsValue(beforInput) == false) { // 前回の入力は演算子 display = Common.CALC_FORMAT; isDot = true; } else { // 小数点フラグがOFFならONにする if (isDot == false) { isDot = true; } } resultTxt.Text = display; } }
/// <summary> /// 演算子ボタンのメイン処理(=は例外) /// </summary> /// <param name="opeTxt">演算子名</param> /// <returns>成功か失敗</returns> private Boolean ClickMainOperator(char opeTxt) { // エラーメッセージが表示されていないかどうか if (MyDetection.IsErrorMsg(display) == false) { // 前回の入力が今回と同じかどうか if (beforInput != opeTxt) { calcBuff = decimal.Parse(display); // 前の処理が=演算子もしくは演算子の場合は代入のみ if (beforInput == Common.EQUAL || MyDetection.IsValue(beforInput) == false || beforOperator == Common.EQUAL) { operatorStorage = '\0'; } Calculate(opeTxt); // 演算処理 return(true); } } return(false); }