Crear Calculadora con WPF y C# (Segunda Parte)


Seguimos desarrollando nuestra calculadora básica que comenzamos en el post anterior (Crear Calculadora con WPF y C# (Primera Parte))

1.- A cada elemento le asignaremos un nombre para poder identificarlo correctamente. Utilizaremos x:Name="nombre" para esta asignación. Lo realizamos en el XAML:

Botones:
<!-- Botones: Números -->
        <button grid.column="0" grid.row="2" x:name="btn7">7</button>
        <button grid.column="1" grid.row="2" x:name="btn8">8</button>
        <button grid.column="2" grid.row="2" x:name="btn9">9</button>
        <button grid.column="0" grid.row="3" x:name="btn4">4</button>
        <button grid.column="1" grid.row="3" x:name="btn5">5</button>
        <button grid.column="2" grid.row="3" x:name="btn6">6</button>
        <button grid.column="0" grid.row="4" x:name="btn1">1</button>
        <button grid.column="1" grid.row="4" x:name="btn2">2</button>
        <button grid.column="2" grid.row="4" x:name="btn3">3</button>
        <button grid.column="1" grid.row="5" x:name="btn0">0</button>

        <!-- Botones: Operadores -->
        <button grid.column="3" grid.row="1" x:name="btnSumar">+</button>
        <button grid.column="3" grid.row="2" x:name="btnRestar">-</button>
        <button grid.column="3" grid.row="3" x:name="btnMultiplicar">*</button>
        <button grid.column="3" grid.row="4" x:name="btnDividir">/</button>
        <button grid.column="3" grid.row="5" x:name="btnResultado">=</button>

        <!-- Botones: Limpiadores -->
        <button grid.column="0" grid.row="1" x:name="btnCE">CE</button>
        <button grid.column="1" grid.row="1" x:name="btnC">C</button>
        <button content="&lt;=" grid.column="2" grid.row="1" x:name="btnRetroceder"></button>
        
        <!-- Boton: Positivo y Negativo -->
        <button content="+-" grid.column="0" grid.row="5" x:name="btnPositivoNegativo"></button>

TextBox:
  <!-- TextBox -->
        <TextBox x:Name="txtResultado" IsReadOnly="True" TextAlignment="Right" VerticalContentAlignment="Bottom" FontSize="40" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="4">0</TextBox>

Ahora comenzaremos con la programación en C#


2.- Comenzamos a programar. Vamos a dar clic en el botón 1, En el panel de Propiedades seleccionamos el control de eventos y damos doble clic en "Clic".


3.- Creamos tres variables (para almacenar los números y la operación)

4.- En la opción Clic del botón 1 insertamos:
 private void btn1_Click(object sender, RoutedEventArgs e)
        {       
            if (operacion == "")
             {
                numero1 = (numero1 * 10) + 1;
                txtResultado.Text = numero1.ToString();
             }
            else
             {
                numero2 = (numero1 * 10) + 1;
                txtResultado.Text = numero1.ToString();
             }
       }

5.- Repetimos este proceso por cada botón numérico, hasta el momento tendríamos:
namespace Calculadora
{
    /// 
    /// Lógica de interacción para MainWindow.xaml
    /// 
    public partial class MainWindow : Window
    {

        long numero1 = 0;
        long numero2 = 0;
        string operacion = "";

        public MainWindow()
        {
            InitializeComponent();
        }


        private void btn1_Click(object sender, RoutedEventArgs e)
        {
            if (operacion == "")
            {
                numero1 = (numero1 * 10) + 1;
                txtResultado.Text = numero1.ToString();
            }
            else
            {
                numero2 = (numero1 * 10) + 1;
                txtResultado.Text = numero1.ToString();
            }

        }

        private void btn2_Click(object sender, RoutedEventArgs e)
        {
            if (operacion == "")
            {
                numero1 = (numero1 * 10) + 2;
                txtResultado.Text = numero1.ToString();
            }
            else
            {
                numero2 = (numero1 * 10) + 2;
                txtResultado.Text = numero1.ToString();
            }
        }

        private void btn3_Click(object sender, RoutedEventArgs e)
        {
            if (operacion == "")
            {
                numero1 = (numero1 * 10) + 3;
                txtResultado.Text = numero1.ToString();
            }
            else
            {
                numero2 = (numero1 * 10) + 3;
                txtResultado.Text = numero1.ToString();
            }
        }

        private void btn4_Click(object sender, RoutedEventArgs e)
        {
            if (operacion == "")
            {
                numero1 = (numero1 * 10) + 4;
                txtResultado.Text = numero1.ToString();
            }
            else
            {
                numero2 = (numero1 * 10) + 4;
                txtResultado.Text = numero1.ToString();
            }
        }

        private void btn5_Click(object sender, RoutedEventArgs e)
        {
            if (operacion == "")
            {
                numero1 = (numero1 * 10) + 5;
                txtResultado.Text = numero1.ToString();
            }
            else
            {
                numero2 = (numero1 * 10) + 5;
                txtResultado.Text = numero1.ToString();
            }
        }

        private void btn6_Click(object sender, RoutedEventArgs e)
        {
            if (operacion == "")
            {
                numero1 = (numero1 * 10) + 6;
                txtResultado.Text = numero1.ToString();
            }
            else
            {
                numero2 = (numero1 * 10) + 6;
                txtResultado.Text = numero1.ToString();
            }
        }

        private void btn7_Click(object sender, RoutedEventArgs e)
        {
            if (operacion == "")
            {
                numero1 = (numero1 * 10) + 7;
                txtResultado.Text = numero1.ToString();
            }
            else
            {
                numero2 = (numero1 * 10) + 7;
                txtResultado.Text = numero1.ToString();
            }
        }

        private void btn8_Click(object sender, RoutedEventArgs e)
        {
            if (operacion == "")
            {
                numero1 = (numero1 * 10) + 8;
                txtResultado.Text = numero1.ToString();
            }
            else
            {
                numero2 = (numero1 * 10) + 8;
                txtResultado.Text = numero1.ToString();
            }
        }

        private void btn9_Click(object sender, RoutedEventArgs e)
        {
            if (operacion == "")
            {
                numero1 = (numero1 * 10) + 9;
                txtResultado.Text = numero1.ToString();
            }
            else
            {
                numero2 = (numero1 * 10) + 9;
                txtResultado.Text = numero1.ToString();
            }
        }

        private void btn0_Click(object sender, RoutedEventArgs e)
        {
            if (operacion == "")
            {
                numero1 = (numero1 * 10) + 0;
                txtResultado.Text = numero1.ToString();
            }
            else
            {
                numero2 = (numero1 * 10) + 0;
                txtResultado.Text = numero1.ToString();
            }
        }
    }
}

6.- Botones de operación:
private void btnSumar_Click(object sender, RoutedEventArgs e)
        {
            operacion = "+";
            txtResultado.Text = "0";
        }

        private void btnRestar_Click(object sender, RoutedEventArgs e)
        {
            operacion = "-";
            txtResultado.Text = "0";
        }

        private void btnMultiplicar_Click(object sender, RoutedEventArgs e)
        {
            operacion = "*";
            txtResultado.Text = "0";
        }

        private void btnDividir_Click(object sender, RoutedEventArgs e)
        {
            operacion = "/";
            txtResultado.Text = "0";
        }

7.- Botón de resultado:
  private void btnResultado_Click(object sender, RoutedEventArgs e)
        {
            switch(operacion)
            {
                case "+":
                    txtResultado.Text = (numero1 + numero2).ToString();
                    break;
                case "-":
                    txtResultado.Text = (numero1- numero2).ToString();
                    break;
                case "*":
                    txtResultado.Text = (numero1 * numero2).ToString();
                    break;
                case "/":
                    txtResultado.Text = (numero1  / numero2).ToString();
                    break;

            }
            numero1 = 0;
            numero2 = 0;
            operacion = "";
        }

8.- Botón +-:
        private void btnPositivoNegativo_Click(object sender, RoutedEventArgs e)
        {
            txtResultado.Text = (-1 * int.Parse(txtResultado.Text)).ToString();
        }

9.- Botones de limpiar entrada
            //CE: CLEAR ENTRY
            if(operacion=="")
            {
                numero1 = 0;
            }
            else
            {
                numero2 = 0;
            }
            txtResultado.Text = "0";

        }

10.- Código de limpiar:
       
private void btnC_Click(object sender, RoutedEventArgs e)
        {
            //C: CLEAR
            numero1 = 0;
            numero2 = 0;
            operacion = "";
            txtResultado.Text = "0";

        }

11.- Botón de retroceder:
        private void btnRetroceder_Click(object sender, RoutedEventArgs e)
        {
            if(operacion=="")
            {
                numero1 = (numero1 / 10);
                txtResultado.Text = numero1.ToString();
            }
            else
            {
                numero2 = (numero2 / 10);
                txtResultado.Text = numero2.ToString();
            }
        }

12.- Código completo:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace Calculadora
{
    /// <summary>
    /// Lógica de interacción para MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {

        long numero1 = 0;
        long numero2 = 0;
        string operacion = "";

        public MainWindow()
        {
            InitializeComponent();
        }


        private void btn1_Click(object sender, RoutedEventArgs e)
        {
            if (operacion == "")
            {
                numero1 = (numero1 * 10) + 1;
                txtResultado.Text = numero1.ToString();
            }
            else
            {
                numero2 = (numero2 * 10) + 1;
                txtResultado.Text = numero2.ToString();
            }

        }

        private void btn2_Click(object sender, RoutedEventArgs e)
        {
            if (operacion == "")
            {
                numero1 = (numero1 * 10) + 2;
                txtResultado.Text = numero1.ToString();
            }
            else
            {
                numero2 = (numero2 * 10) + 2;
                txtResultado.Text = numero2.ToString();
            }
        }

        private void btn3_Click(object sender, RoutedEventArgs e)
        {
            if (operacion == "")
            {
                numero1 = (numero1 * 10) + 3;
                txtResultado.Text = numero1.ToString();
            }
            else
            {
                numero2 = (numero2 * 10) + 3;
                txtResultado.Text = numero2.ToString();
            }
        }

        private void btn4_Click(object sender, RoutedEventArgs e)
        {
            if (operacion == "")
            {
                numero1 = (numero1 * 10) + 4;
                txtResultado.Text = numero1.ToString();
            }
            else
            {
                numero2 = (numero2 * 10) + 4;
                txtResultado.Text = numero2.ToString();
            }
        }

        private void btn5_Click(object sender, RoutedEventArgs e)
        {
            if (operacion == "")
            {
                numero1 = (numero1 * 10) + 5;
                txtResultado.Text = numero1.ToString();
            }
            else
            {
                numero2 = (numero2 * 10) + 5;
                txtResultado.Text = numero2.ToString();
            }
        }

        private void btn6_Click(object sender, RoutedEventArgs e)
        {
            if (operacion == "")
            {
                numero1 = (numero1 * 10) + 6;
                txtResultado.Text = numero1.ToString();
            }
            else
            {
                numero2 = (numero2 * 10) + 6;
                txtResultado.Text = numero2.ToString();
            }
        }

        private void btn7_Click(object sender, RoutedEventArgs e)
        {
            if (operacion == "")
            {
                numero1 = (numero1 * 10) + 7;
                txtResultado.Text = numero1.ToString();
            }
            else
            {
                numero2 = (numero2 * 10) + 7;
                txtResultado.Text = numero2.ToString();
            }
        }

        private void btn8_Click(object sender, RoutedEventArgs e)
        {
            if (operacion == "")
            {
                numero1 = (numero1 * 10) + 8;
                txtResultado.Text = numero1.ToString();
            }
            else
            {
                numero2 = (numero2 * 10) + 8;
                txtResultado.Text = numero2.ToString();
            }
        }

        private void btn9_Click(object sender, RoutedEventArgs e)
        {
            if (operacion == "")
            {
                numero1 = (numero1 * 10) + 9;
                txtResultado.Text = numero1.ToString();
            }
            else
            {
                numero2 = (numero2 * 10) + 9;
                txtResultado.Text = numero2.ToString();
            }
        }

        private void btn0_Click(object sender, RoutedEventArgs e)
        {
            if (operacion == "")
            {
                numero1 = (numero1 * 10);
                txtResultado.Text = numero1.ToString();
            }
            else
            {
                numero2 = (numero2 * 10);
                txtResultado.Text = numero2.ToString();
            }
        }

        private void btnSumar_Click(object sender, RoutedEventArgs e)
        {
            operacion = "+";
            txtResultado.Text = "0";
        }

        private void btnRestar_Click(object sender, RoutedEventArgs e)
        {
            operacion = "-";
            txtResultado.Text = "0";
        }

        private void btnMultiplicar_Click(object sender, RoutedEventArgs e)
        {
            operacion = "*";
            txtResultado.Text = "0";
        }

        private void btnDividir_Click(object sender, RoutedEventArgs e)
        {
            operacion = "/";
            txtResultado.Text = "0";
        }

        private void btnResultado_Click(object sender, RoutedEventArgs e)
        {
            switch(operacion)
            {
                case "+":
                    txtResultado.Text = (numero1 + numero2).ToString();
                    break;
                case "-":
                    txtResultado.Text = (numero1- numero2).ToString();
                    break;
                case "*":
                    txtResultado.Text = (numero1 * numero2).ToString();
                    break;
                case "/":
                    txtResultado.Text = (numero1  / numero2).ToString();
                    break;

            }
            numero1 = 0;
            numero2 = 0;
            operacion = "";
        }

        private void btnCE_Click(object sender, RoutedEventArgs e)
        {
            //CE: CLEAR ENTRY
            if(operacion=="")
            {
                numero1 = 0;
            }
            else
            {
                numero2 = 0;
            }
            txtResultado.Text = "0";

        }

        private void btnC_Click(object sender, RoutedEventArgs e)
        {
            //C: CLEAR
            numero1 = 0;
            numero2 = 0;
            operacion = "";
            txtResultado.Text = "0";

        }

        private void btnRetroceder_Click(object sender, RoutedEventArgs e)
        {
            if(operacion=="")
            {
                numero1 = (numero1 / 10);
                txtResultado.Text = numero1.ToString();
            }
            else
            {
                numero2 = (numero2 / 10);
                txtResultado.Text = numero2.ToString();
            }
        }

        private void btnPositivoNegativo_Click(object sender, RoutedEventArgs e)
        {
            txtResultado.Text = (-1 * int.Parse(txtResultado.Text)).ToString();
            // txtResultado.Text = Math.Abs(int.Parse(txtResultado.Text)).ToString();
        }
    }
}

Ahora solo queda mejorar el código y algunas funciones.

Saludos

0 comentarios:

Publicar un comentario