2021年4月11日星期日

Issue: c# calculator operation after clear button

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

没有评论:

发表评论