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í.