hi im currently trying to make a calculator using c# winform which looks like win10 calculator everytime i do an operation after i click C or CE button (it is clearButton and clearAllButton in the code) the result is 0, can anyone tell me how i can fix this? also i don't know why but when i click the history panel button after i click c/ce button and come back to the numberpad, i get the correct result, why would this be?
below is my code,
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace CalculatorApp { public partial class Calculator : Form { private double firstEntry; private char op = '\0'; private bool opFlag = false; private double memory; private bool memFlag; private List<String> resultList = new List<String>(); public Calculator() { InitializeComponent(); MCButton.Enabled = false; MRButton.Enabled = false; } private void Calculator_Load(object sender, EventArgs e) { this.KeyPreview = true; } private void btn_Click(object sender, EventArgs e) { Button btn = sender as Button; string btnNumber = btn.Name.Remove(0, 3); if (txtResult.Text == "0" || opFlag == true || memFlag == true) { txtResult.Text = btnNumber; opFlag = false; memFlag = false; } else txtResult.Text = txtResult.Text + btnNumber; double v = Double.Parse(txtResult.Text); int pos = 0; if (txtResult.Text.Contains(".")) { pos = txtResult.Text.Length - txtResult.Text.IndexOf('.'); if (pos == 1) return; string formatStr = "{0:N" + (pos - 1) + "}"; txtResult.Text = string.Format(formatStr, v); } else txtResult.Text = string.Format("{0:N0}", v); } private void plusButton_Click(object sender, EventArgs e) { firstEntry = Double.Parse(txtResult.Text); formula.Text = txtResult.Text + " +"; op = '+'; opFlag = true; } private void minusButton_Click(object sender, EventArgs e) { firstEntry = Double.Parse(txtResult.Text); formula.Text = txtResult.Text + " -"; op = '-'; opFlag = true; } private void multiplyButton_Click(object sender, EventArgs e) { firstEntry = Double.Parse(txtResult.Text); formula.Text = txtResult.Text + " ×"; op = '×'; opFlag = true; } private void divideButton_Click(object sender, EventArgs e) { firstEntry = Double.Parse(txtResult.Text); formula.Text = txtResult.Text + " ÷"; op = '÷'; opFlag = true; } private void equalButton_Click(object sender, EventArgs e) { Double secondEntry = Double.Parse(txtResult.Text); switch(op) { case '+': txtResult.Text = (firstEntry + secondEntry).ToString(); break; case '-': txtResult.Text = (firstEntry - secondEntry).ToString(); break; case '×': txtResult.Text = (firstEntry * secondEntry).ToString(); break; case '÷': txtResult.Text = (firstEntry / secondEntry).ToString(); break; } String storedResult = formula.Text + secondEntry.ToString() + " = " + txtResult.Text; resultList.Add(storedResult); formula.Text = ""; } private void signButton_Click(object sender, EventArgs e) { double v = Double.Parse(txtResult.Text); txtResult.Text = (-v).ToString(); } private void decimalButton_Click(object sender, EventArgs e) { if (txtResult.Text.Contains(".")) return; else txtResult.Text += "."; } private void divideOneButton_Click(object sender, EventArgs e) { formula.Text = "1/(" + txtResult.Text + ")"; txtResult.Text =(1 / Double.Parse(txtResult.Text)).ToString(); } private void squareRootButton_Click(object sender, EventArgs e) { formula.Text = "√(" + txtResult.Text + ")"; txtResult.Text = Math.Sqrt(Double.Parse(txtResult.Text)).ToString(); } private void squareButton_Click(object sender, EventArgs e) { formula.Text = "sqr(" + txtResult.Text + ")"; txtResult.Text = (Double.Parse(txtResult.Text) * Double.Parse(txtResult.Text)).ToString(); } private void ratioButton_Click(object sender, EventArgs e) { } private void clearButton_Click(object sender, EventArgs e) { txtResult.Text = "0"; } private void clearAllButton_Click(object sender, EventArgs e) { txtResult.Text = "0"; formula.Text = ""; firstEntry = 0; op = '\0'; opFlag = false; } private void eraseButton_Click(object sender, EventArgs e) { txtResult.Text = txtResult.Text.Remove(txtResult.Text.Length - 1); if (txtResult.Text.Length == 0) txtResult.Text = "0"; } private void MCButton_Click(object sender, EventArgs e) { txtResult.Text = "0"; memory = 0; MRButton.Enabled = false; MCButton.Enabled = false; } private void MRButton_Click(object sender, EventArgs e) { txtResult.Text = memory.ToString(); memFlag = true; } private void MPlusButton_Click(object sender, EventArgs e) { memory += Double.Parse(txtResult.Text); } private void MMinusButton_Click(object sender, EventArgs e) { memory -= Double.Parse(txtResult.Text); } private void MSButton_Click(object sender, EventArgs e) { memory = Double.Parse(txtResult.Text); MCButton.Enabled = true; MRButton.Enabled = true; memFlag = true; } private void Calculator_KeyDown(object sender, KeyEventArgs e) { switch (e.KeyCode) { case Keys.NumPad0: case Keys.D0: btn_Click(btn0, EventArgs.Empty); break; case Keys.NumPad1: case Keys.D1: btn_Click(btn1, EventArgs.Empty); break; case Keys.NumPad2: case Keys.D2: btn_Click(btn2, EventArgs.Empty); break; case Keys.NumPad3: case Keys.D3: btn_Click(btn3, EventArgs.Empty); break; case Keys.NumPad4: case Keys.D4: btn_Click(btn4, EventArgs.Empty); break; case Keys.NumPad5: case Keys.D5: btn_Click(btn5, EventArgs.Empty); break; case Keys.NumPad6: case Keys.D6: btn_Click(btn6, EventArgs.Empty); break; case Keys.NumPad7: case Keys.D7: btn_Click(btn7, EventArgs.Empty); break; case Keys.NumPad8: case Keys.D8: if (e.Shift) { multiplyButton_Click(sender, EventArgs.Empty); } else { btn_Click(btn8, EventArgs.Empty); } break; case Keys.NumPad9: case Keys.D9: btn_Click(btn9, EventArgs.Empty); break; case Keys.Decimal: decimalButton_Click(sender, EventArgs.Empty); break; case Keys.Oemplus: if (e.Shift) { plusButton_Click(sender, EventArgs.Empty); } else { equalButton_Click(sender, EventArgs.Empty); } break; case Keys.Add: plusButton_Click(sender, EventArgs.Empty); break; case Keys.OemMinus: minusButton_Click(sender, EventArgs.Empty); break; case Keys.Subtract: minusButton_Click(sender, EventArgs.Empty); break; case Keys.Multiply: multiplyButton_Click(sender, EventArgs.Empty); break; case Keys.Divide: divideButton_Click(sender, EventArgs.Empty); break; case Keys.Back: eraseButton_Click(sender, EventArgs.Empty); break; case Keys.Escape: this.Close(); break; } } private void Calculator_KeyUp(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { equalButton_Click(sender, EventArgs.Empty); } } private void historyBtn_Click(object sender, EventArgs e) { history.Visible = !history.Visible; historyLabel.Text = string.Empty; foreach (string result in resultList) { historyLabel.Text += result + Environment.NewLine + Environment.NewLine; } } } }
also any idea how i can make file logs each time i do an operation?
https://stackoverflow.com/questions/67051829/issue-c-sharp-calculator-operation-after-clear-button April 12, 2021 at 10:05AM
没有评论:
发表评论