none
Problema com Calculadora RRS feed

  • Pergunta

  • Olá eu desenvolvi uma calculadora em c# xml o problema e que quando aperto no = fica multiplicando vou passar o código para vcs darem uma olhada:

     public partial class MainWindow : Window
        {
            double acumula = 0;
            string operacao = "";
            public MainWindow()
            {
                InitializeComponent();
            }

            private void zero_Click(object sender, RoutedEventArgs e)
            {
                display.Text += "0";
            }

            private void um_Click(object sender, RoutedEventArgs e)
            {
                display.Text += "1";
            }

            private void dois_Click(object sender, RoutedEventArgs e)
            {
                display.Text += "2";
            }

            private void tres_Click(object sender, RoutedEventArgs e)
            {
                display.Text += "3";
            }

            private void quatro_Click(object sender, RoutedEventArgs e)
            {
                display.Text += "4";
            }

            private void cinco_Click(object sender, RoutedEventArgs e)
            {
                display.Text += "5";
            }

            private void seis_Click(object sender, RoutedEventArgs e)
            {
                display.Text += "6";
            }

            private void sete_Click(object sender, RoutedEventArgs e)
            {
                display.Text += "7";
            }

            private void oito_Click(object sender, RoutedEventArgs e)
            {
                display.Text += "8";
            }

            private void nove_Click(object sender, RoutedEventArgs e)
            {
                display.Text += "9";
            }

            private void soma_Click(object sender, RoutedEventArgs e)
            {
                if (operacao == "*" || operacao == "-" || operacao == "/")
                {
                    operacao = "+";
                }
                else
                {
                    acumula += double.Parse(display.Text);
                    display.Text = "";
                    operacao = "+";
                }

            }

            private void igual_Click(object sender, RoutedEventArgs e)
            {

                if (operacao == "+")
                {
                    acumula += double.Parse(display.Text);
                    display.Text = acumula.ToString();
                }
                else if (operacao == "-")
                {
                    acumula -= double.Parse(display.Text);
                    display.Text = acumula.ToString();
                }
                else if (operacao == "*")
                {

                    acumula *= double.Parse(display.Text);
                    display.Text = acumula.ToString();
                }
                else if (operacao == "/")
                {

                    if (double.Parse(display.Text) != 0)
                    {
                        acumula /= double.Parse(display.Text);
                        display.Text = acumula.ToString();
                    }
                    else
                    {

                        display.Text = "Dividindo por zero";
                    }
                }
            }

            private void virgula_Click(object sender, RoutedEventArgs e)
            {
                display.Text += ",";
            }

            private void subtracao_Click(object sender, RoutedEventArgs e)
            {
                if (operacao == "*" || operacao == "+" || operacao == "/")
                {
                    operacao = "-";
                }
                else
                {
                    acumula = double.Parse(display.Text);
                    display.Text = "";
                    operacao = "-";
                }
            }

            private void multiplicacao_Click(object sender, RoutedEventArgs e)
            {
                if (operacao == "-" || operacao == "+" || operacao == "/")
                {
                    operacao = "*";
                }
                else
                {
                    acumula = double.Parse(display.Text);
                    display.Text = "";
                    operacao = "*";
                }
            }

            private void divisao_Click(object sender, RoutedEventArgs e)
            {
                if (operacao == "*" || operacao == "+" || operacao == "-")
                {
                    operacao = "/";
                }
                else
                {
                    acumula = double.Parse(display.Text);
                    display.Text = "";
                    operacao = "/";
                }
            }

            private void voltar_Click(object sender, RoutedEventArgs e)
            {
                int x = display.Text.Length - 1;
                if (x >= 0)
                {
                    display.Text = display.Text.Substring(0, x);
                }
            }

            private void inverso_Click(object sender, RoutedEventArgs e)
            {
                try
                {
                    double d = double.Parse(display.Text);
                    if (d == 0)
                    {
                        display.Text = "Dividindo por zero";
                    }
                    else
                    {
                        d = 1 / d;
                        display.Text = d.ToString();
                    }
                }
                catch (Exception Ex)
                {

                    for (int i = 0; i < 100000; i++)
                    {
                        display.Text = "Não da para dividir. ";
                        // em espera.
                    }
                    display.Text = "";

                }
            }

            private void raiz_Click(object sender, RoutedEventArgs e)
            {
                double x = double.Parse(display.Text);
                if (x < 0)
                {
                    display.Text = "Este valor não é valido.";
                }
                else
                {
                    x = Math.Sqrt(x);
                    display.Text = x.ToString();
                }
            }

            private void button2_Click(object sender, RoutedEventArgs e)
            {
                acumula = 0;
                display.Text = "";
            }

            private void button1_Click(object sender, RoutedEventArgs e)
            {
                display.Text = "";
                operacao = "";

            }

            private void maisoumenos_Click(object sender, RoutedEventArgs e)
            {
                double x = double.Parse(display.Text) * (-1);
                display.Text = x.ToString();
            }

            private void Window_Loaded(object sender, RoutedEventArgs e)
            {

            }
        }
    }


    Ana Clara Sesana Moreira


    domingo, 14 de fevereiro de 2016 03:42

Respostas

  • Boa tarde Ana,

    Acredito que esse comportamento acontece porque a última operação que você fez nas suas contas foi a de multiplicação, então quando você clica no botão "igual" (ativando o evento "igual_Click"), ele reconhece que a variável "operacao" ainda está com o valor "*" armazenado.

    Abs.

    Bruno Destro


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/

    domingo, 14 de fevereiro de 2016 14:29