Calculadora sencilla utilizando KeyPress y KeyChar con botones de comando para insertar números, realizar operaciones matemáticas frecuentes, almacenar en memoria, poner a cero, etc., en Visual Basic
Detalles del código Visual Basic .NET
Variables para usar a nivel de clase y procedimiento que coloca el cursor en posición de escribir:
' Variables a nivel de clase Private Memoria As Double ' Para operaciones de las teclas de memoria M Private Resultado As Double ' Resultado de la operación Private Operador As String ' Operador que se ha pulsado Private TocaBorrar As Boolean ' Para saber si hemos pulsado uno de los operadores + - * / Private prov3 As Double ' Para el cáculo de la raíz cuadrada ' Salto de línea para usar en los cuadros de diálogo Private SaltoLinea As Char = Chr(13) & Chr(10) ' equivale a vbCrLf
' Procedimiento que coloca el cursor a la derecha de la pantalla del resultado, para añadir dígitos Private Sub PantallaCursor() TextboxPantalla.Focus() ' da el foco a la pantalla TextboxPantalla.SelectionStart = 12 ' coloca el cursor a la derecha del todo TextboxPantalla.SelectionLength = 0 ' selección de cero caracteres End Sub
Al cargar el formulario se muestra la fecha y hora actual:
' mostrar la fecha en el cuadro de texto TxtHora al arrancar el programa ' variable de tipo fecha, se obtienen la fecha actual Dim Fecha As Date Fecha = Now() ' dar formato a la fecha y poner en mayúscula la primera letra de cada palabra TxtHora.Text = StrConv((Format(Fecha, "dddd, dd/MMMM/yyyy, HH:mm ")), VbStrConv.ProperCase)
Detectando el evento KeyPress en el cuadro de texto en que se introducen los números se averigua el valor KeyChar (el código ASCII) de la tecla pulsada para dejar pasar solamente los valores que coinciden con números, la coma o la tecla Retroceso, el resto de teclas pulsadas se ignoran:
' Capturar la tecla pulsada cuando el foco está en la pantalla del resultado Private Sub TxtPantalla_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextboxPantalla.KeyPress ' según el valor de la tecla pulsada Select Case e.KeyChar ' pasan valores si la tecla pulsada es un número de 0 a 9 o una coma o la tecla Retroceso Case "1"c, "2"c, "3"c, "4"c, "5"c, "6"c, "7"c, "8"c, "9"c, "0"c, ","c, Chr(8) ' si la propiedad Handled del objeto e se pone a True se indica que la tecla ha sido "manejada" por el evento, equivale a ' indicar que la tecla NO ha sido pulsada, pero si la propiedad Handled del objeto e se pone a False se indica que la tecla ' todavía no ha sido "manejada" por el evento y se envía como pulsación a la pantalla e.Handled = False ' se pasa la pulsación Case Else e.Handled = True ' no se pasa la pulsación End Select End Sub
El botón Calcular realiza la operación matemática seleccionada almacenando el valor del cuadro de texto en la variable Resultado y aplicando la operación elegida:
' Operación matemática que se está realizando Private Sub Calcular() Select Case Operador ' operador en uso, puede ser +-*/ Case "" If TextboxPantalla.Text.Length > 0 Then ' si la pantalla no está vacía Resultado = TextboxPantalla.Text ' Resultado es lo que muestra la pantalla Else ' si la pantalla está vacía Resultado = 0.0 ' Resultado a cero End If Case "+" If TextboxPantalla.Text.Length > 0 Then ' si la pantalla no está vacía Resultado = Resultado + TextboxPantalla.Text ' Resultado es Resultado más lo que muestra la pantalla Else ' si la pantalla está vacía Resultado = 0.0 ' Resultado a cero End If Case "-" If TextboxPantalla.Text.Length > 0 Then ' si la pantalla no está vacía Resultado = Resultado - TextboxPantalla.Text ' Resultado es Resultado menos lo que muestra la pantalla Else ' si la pantalla está vacía Resultado = 0.0 ' Resultado a cero End If Case "*" If TextboxPantalla.Text.Length > 0 Then ' si la pantalla no está vacía Resultado = Resultado * TextboxPantalla.Text ' Resultado es Resultado multiplicado por lo que muestra la pantalla Else ' si la pantalla está vacía Resultado = 0.0 ' Resultado a cero End If Case "/" If TextboxPantalla.Text.Length > 0 Then ' si la pantalla no está vacía Resultado = Resultado / TextboxPantalla.Text ' Resultado es Resultado dividido por lo que muestra la pantalla Else ' si la pantalla está vacía Resultado = 0.0 ' Resultado a cero End If End Select TextboxPantalla.Text = Math.Round(Resultado, 3) ' redondear a 3 decimales TocaBorrar = True ' para arrastrar acumulada la operación End Sub
A los botones de operadores matemáticos se les asocia un evento para que el método Calcular sepa qué operador se está utilizando. Por ejemplo con la suma:
' Botón de suma Private Sub BtSuma_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtSuma.Click If TextboxPantalla.Text.Length > 0 Then ' si hay dígitos en la pantalla Calcular() ' operación pendiente TextboxPantalla.Text = "" ' vaciar pantalla Operador = "+" ' operador pendiente Else ' si la pantalla está vacía Resultado = 0.0 ' Resultado a cero End If PantallaCursor() ' cursor colocado para escribir de nuevo End Sub
Esta aplicación forma parte de un ejercicio en el que, además de diseñar la calculadora, había que hacer otro formulario que imitase lo más posible a la calculadora clásica de Windows, solamente el diseño, sin código adicional, por eso tiene un menú que arranca el segundo formulario con ese aspecto. Es sencillo eliminar toda esa parte del ejercicio.
' mostrar una imagen lo más parecida posible a la calculadora clásica de Windows, sólo como parte de un ejercicio Private Sub MenuCalculadora_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuCalculadora.Click PantallaCursor() ' cursor colocado para escribir de nuevo Dim Calculadora As New Form2 ' nueva variable de la clase formulario Calculadora.ShowDialog() ' abrir el formulario Form2 End Sub
Puedes descargar el código completo desde aquí.