// 貼り付け(メニュー) private void menuPaste_Click(object sender, EventArgs e) { String str = Clipboard.GetText(); // クリップボードから取得 // 文字列を一つずつ貼り付けていく for (int i = 0; i < str.Length; ++i) { // 半角数字のみかどうか調べる if (MyDetection.IsHalfWidth(str.Substring(i, 1)) == true) { // 最初のみ一度表示を消す if (i == 0) { display = Common.CALC_FORMAT; } display = CalcManager.UpDigit(display, str.Substring(i, 1), ref beforInput, isDot); display = CalcManager.ThousandSeparator(isSeparat, display); resultTxt.Text = display; this.Refresh(); } else { // 半角数字以外のものが見つかった場合は即終了 break; } } resultTxt.Text = display; this.Refresh(); // 表示を更新 }
// 1/xボタン private void xDivOneBtn_Click(object sender, EventArgs e) { // エラーメッセージが表示の判定と今の表示が0.かどうか判定 if (display != Common.CALC_FORMAT && MyDetection.IsErrorMsg(display) == false) { decimal work = decimal.Parse(display); work = 1 / work; // 小数点があるかどうか if (MyDetection.IsValueToDot(work) == true) { // あれば桁下げしておく display = CalcManager.DotAdjust(work.ToString()); } else { // なければ最下位桁に点を追加 display = work.ToString() + '.'; } // 桁区切り display = CalcManager.ThousandSeparator(isSeparat, display); resultTxt.Text = display; } }
// +/-ボタン private void addToSubBtn_Click(object sender, EventArgs e) { // エラーメッセージが表示されているかどうか if (MyDetection.IsErrorMsg(display) == false) { // 前回の入力が演算子かどうか if (MyDetection.IsOperator(beforInput) == false) { decimal work = decimal.Parse(display); // 表示文字列をワークに代入 work *= -1; // 符号を逆にする display = work.ToString(); // 文字列化して保存 // 値が小数かどうか if (MyDetection.IsValueToDot(work) == false) { display += '.'; // 値が少数ではないなら一番右端に 点(.)を追加 } } else { // もし演算子なら表示を0.に戻す display = Common.CALC_FORMAT; isDot = false; } // 桁区切り display = CalcManager.ThousandSeparator(isSeparat, display); resultTxt.Text = display; } }
// 桁区切り(メニュー) private void menuThousandSeparator_Click(object sender, EventArgs e) { isSeparat ^= true; // フラグ変更 menuThousandSeparator.Checked = isSeparat; // チェックのON OFF display = CalcManager.ThousandSeparator(isSeparat, display); resultTxt.Text = display; }
/// <summary> /// 数字ボタンのメイン処理 /// </summary> /// <param name="btnTxt">数字</param> /// <returns>成功か失敗</returns> private Boolean ClickMainValue(String valueTxt) { if (MyDetection.IsErrorMsg(display) == false) { display = CalcManager.UpDigit(display, valueTxt, ref beforInput, isDot); // 桁上げ処理 display = CalcManager.ThousandSeparator(isSeparat, display); // 桁数処理 resultTxt.Text = display; // 表示を更新 return(true); } return(false); }
// 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; } } }
// MemoryStoreボタン private void memoryStoreBtn_Click(object sender, EventArgs e) { if (MyDetection.IsErrorMsg(display) == false) { // 少数桁以下の無駄な0を削除 display = CalcManager.DotAdjust(display); // 表示用文字列が0だけではなかったら if (MyDetection.IsCalcFormat(display) == false) { memory = decimal.Parse(display); // ラベルにテキスト描画 if (memoryLabel.Text == "") { memoryLabel.Text = "M"; } } resultTxt.Text = display; } }
// sqrtボタン private void sqrtBtn_Click(object sender, EventArgs e) { // エラーメッセージが表示されているか if (MyDetection.IsErrorMsg(display) == false) { // decimal型に変換 decimal work = decimal.Parse(display); // 変換した値がマイナスだった場合はエラー if (MyDetection.IsNegativeValue(work) == true) { display = Common.ERROR3; } else { work = CalcManager.DecimalSqrt(work); // 平方根に直す // 小数点があるかどうかを調べる if (MyDetection.IsValueToDot(decimal.Parse(work.ToString()))) { display = CalcManager.DotAdjust(work.ToString()); } else { // ない場合は右端に点(.)をつける display = work.ToString() + '.'; } } // 桁区切り display = CalcManager.ThousandSeparator(isSeparat, display); resultTxt.Text = display; } }
/// <summary> /// 演算処理 /// </summary> private void Calculate(Char operat) { beforInput = operat; // 前回入力された内容に演算子を入力された代入 beforOperator = operat; // 前回入力された演算子に入力された演算子代入 switch (operatorStorage) { // 加算処理 case Common.ADD: total = total + calcBuff; break; // 減産処理 case Common.SUB: total = total - calcBuff; break; // 乗算処理 case Common.MULTIPLY: total = total * calcBuff; break; // 除算処理 case Common.DIVIDE: if (calcBuff == 0) { if (total == 0) { // 0÷0の計算 display = Common.ERROR1; break; } else { // X÷0の計算 display = Common.ERROR2; break; } } total = total / calcBuff; // エラーではない場合は普通に計算 break; // 合計に代入するだけ default: total = calcBuff; break; } // エラーがdisplayに入っていないか if (MyDetection.IsErrorMsg(display) == false) { if (operat != Common.EQUAL) { // =演算子は代入しない operatorStorage = operat; } // 数値を文字列化し表示用文字列に代入 display = total.ToString(); // 少数かどうか判定し,少数ではない場合は結果に小数点を付与 if (MyDetection.IsValueToDot(total) == false) { display += '.'; } // 小数点以下無駄な0を省く display = CalcManager.DotAdjust(display); isDot = false; // 小数点フラグOFF } // 桁区切り display = CalcManager.ThousandSeparator(isSeparat, display); resultTxt.Text = display; }