Калькулятор проекта c# - PullRequest
0 голосов
/ 25 мая 2020

Я хочу заставить Button Equal повторить последнюю операцию, но не знаю, как это сделать. Я пробовал разные способы сделать это, но не получил правильного ответа. Это мой код формы windows. Я попытался создать переменную, которая запоминает результат, но при использовании этого метода, если я напишу 3 + 3 = 6, а затем снова нажму равное, я получу 12, потому что калькулятор добавляет 6 + 6 вместо 6 + 3.

    Double tal = 0;
    string operation = "";
    bool operationKlickad = false;


    public Form1()
    {
        InitializeComponent();
    }

    private void button_click(object sender, EventArgs e)
    {
        if (txbWindow.Text == "0" || operationKlickad)
        {
            txbWindow.Clear();
        }

        operationKlickad = false;
        Button b = (Button)sender;//Konverterar object sender till en button. 
        if(b.Text == ",")
        {
            if(!txbWindow.Text.Contains(","))//Om det inte finns något komma så skriver den det men om det finns händer inget.
                txbWindow.Text = txbWindow.Text + b.Text;
        }
        else
            txbWindow.Text = txbWindow.Text + b.Text; // Tar det som står på knappen

    }

    private void btnCE_Click(object sender, EventArgs e) 
    {
        txbWindow.Text = "0";// tar bort allt i rutan
    }

    private void operator_click(object sender, EventArgs e)//När man klickar på +, -, * osv...
    {
        Button b = (Button)sender;

        if (tal == 0) // om inte tal är 0. Vilket innebär att man har klickat på en av operatör knapparna igen
        {

            operation = b.Text;// sparar vilken operation som blir klickad
            tal = Double.Parse(txbWindow.Text);//sparar talet som är i rutan
            operationKlickad = true;
            lblEkvation.Text += tal + " " + operation;
        }
        else
        {
            btnEqual.PerformClick(); //turn on equal button
            operationKlickad = true;
            operation = b.Text;
            lblEkvation.Text += tal + " " + operation;//Visar föregående tal och vilken operation
        }

    }

    private void btnEqual_Click(object sender, EventArgs e) //Equalbutton
    {

        lblEkvation.Text = "";//rensar ekvationen 

        switch (operation)
        {
                case "+":
                    txbWindow.Text = Convert.ToString(tal + Double.Parse(txbWindow.Text)); //sets tbxwindo to the number written plus number in the window
                    break;

                case "-":
                    txbWindow.Text = Convert.ToString((tal) - Double.Parse(txbWindow.Text));
                    break;

                case "*":
                    txbWindow.Text = Convert.ToString(tal * Double.Parse(txbWindow.Text));
                    break;

                case "/":
                    txbWindow.Text = Convert.ToString(tal / Double.Parse(txbWindow.Text));
                    break;

                case "√":
                    txbWindow.Text = Convert.ToString(Math.Sqrt(Double.Parse(txbWindow.Text)));
                    break;

                case "±":
                    txbWindow.Text = Convert.ToString(-1 * Double.Parse(txbWindow.Text));
                    break;

                case "1 / X":
                    txbWindow.Text = Convert.ToString(1 / (Double.Parse(txbWindow.Text)));
                    break;

                default:
                    break;

        }
        tal = Double.Parse(txbWindow.Text);
        operation = "";

    }

    private void btnC_Click(object sender, EventArgs e)
    {
        txbWindow.Text = "0"; //tar bort allt i rutan
        tal = 0;//tar bort talet som sparats 
        lblEkvation.Text = "";
    }

    private void btnBack_Click(object sender, EventArgs e)
    {
        txbWindow.Text = txbWindow.Text.Remove(txbWindow.Text.Length - 1); // Tar stringen och tar bort sista karaktären

1 Ответ

1 голос
/ 25 мая 2020

После прохождения вашего кода, я предполагаю, что переменная 'tal' отвечает за сохранение последнего значения операнда (ожидаемое - 3, фактическое - 6, как в приведенном вами примере). Вы пытались отладить код, чтобы проверить, обновляется ли где-нибудь значение tal? В идеале это помогло бы вам выяснить, в чем заключается настоящая причина root.

Кроме того, как только вы это поймете, я заметил еще одно наблюдение, касающееся операторов минуса и деления (которые, я думаю, вы бы поняли в любом случае в ходе вашего тестирования)

                case "-":
                    txbWindow.Text = Convert.ToString(Double.Parse(txbWindow.Text) - tal);
                    break;

                case "*":
                    //No change required here

                case "/":
                    txbWindow.Text = Convert.ToString(Double.Parse(txbWindow.Text) / tal);
                    break;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...