No te he entendido apenas nada de lo que quieres... porque te explicas muy mal.
El código es muy pobre pero como dices que eres principiante, se entiende...
Veamos, la raíz es a la potencia lo que la división a la multiplicación y lo que la suma a la resta. Por lo tanto debería serte fácil encontrar una solución óptima con sólo una línea para calcularlo...
Seguimos, el seno, coseno, tangente y demás funciones trigonómetricas, incluídas las derivadas (de estas) las tiene VB como funciones... ve a la ayuda de VB y escribe para buscar 'Funciones matemáticas' y 'Funciones matemáticas derivadas'.
El visor no tiene porque ser de una sóla línea, de hecho
es más útil un visor multilínea, es más útil porque no te obliga como usuario a memorizar el valor que acabas de introducir, puedes verificar que no te equivocaste al pulsarlo, y además al término de la operación puede servirte para una nueva operación sin tener que volver a introducir de nuevolos 2 operandos y la operación :
Linea 1 operando 1
linea 2 operación que se quiere aplicar
linea 3 operando 2
linea 4 resultado, entre la línea 3 y la 4 pones una rayita (control line, por ejemplo)
... y finalmente, para que todo lo hagas usando un único textbox, tienes que guardar el dato previo...
repásate este hilo:
http://foros.solocodigo.com/viewtopic.php?f=143&t=40556 pués lo que en él explico, se aplica a tu problema... puedes usar propiedades para retener los datos y verificar el valor introducido, no obstante como eres principante, seguiremos un método que no recurre a propiedades y es más directo y asequible para tí.
Te lo resumo... de entrada tendremos varios botones de operaciones por ejemplo suma, resta, div.., mult... etc... y uno para borrar (suspender la operación en curso).
Igualmente tenemos, otros botones que representan las cifras (no queremos que introduzcan k, si no números y mejor si les proveemos los números como botones...)
La operativa es la siguiente:
1: introducir 1 número (operando1)
2: elegir una operación, sólo cuando el usuario elija una operación guardamos la cifra actual que hay en el visor (nuestro textbox) operando1= val(text1.text) y borramos el visor... o mejor desactivamos este visor y activamos uno justo debajo.
3: introducir otra cifra, sólo si el usuario elige una cifra en este paso, guardamos la operación que eligió el usuario, en el paso 2 (se hace ahora, porque el usuario puede pulsar varias teclas de operaciones, dejaremos como activa la última pulsada).
4: elegir otra operación..., sólo si es una operación guardamos la cifra actual del visor operando2=val( text1.text), la operación esperada es '=', pero no importa, si es un botón de operación, hacemos una llamada a calcular, acto seguido si la operación no era igual ('='), está se guarda como operación y la cifra calculada como operando1, por lo que estaríamos de nuevo a la espera del paso 3...
-----------------
Para hacer la calculadora, cómodamente añades un botón le llamas comCifra en el caption pones el texto '0', y en la propiedad index le pones 0, copia ese botón y pégalo 9 veces, ya tienes una matriz de 10 botones llamados cifras, cuyo index coincide con el valor, cambia el caption de los nuevos botones al valor que indica la propiedad index... distribúyelos ordenadamente en el formulario...
El código (del visor de 1 línea) sería, más o menos:
Private Sub ComCifras_Click(Index As Integer)
If paso Mod 2 = 0 Then ' si el paso es par (osea 0,2,4)
If paso = 2 Then
paso = 3
Else
paso = 1
End If
Text1.Text = "" ' se van a escribir cifras, borramos lo que halla
End If
' está introduciendo valores numéricos
Text1.Text = Text1.Text & CStr(Index)
End Sub
Ahora coloca otro botón en el formulario llámalo ComOperacion, en el caption pon '=', y en la propiedad index el valor 0, copia este control y pégalo varias veces (1 por cada operación que quieras hacer)... tendrás una matriz de botones de operacion, cambia los caption para que reflejen lo que hacen '+' , '-', ... no importa la distribución ni el orden, pero ponlos que queden bien presentados en el formulario...(yo he reservado 'en este ejemplo' el 0 para '=' el 1 para borrar operaciones 2, para sumar, 3 para '-', 4 para '*', 5 para '/' 6 para potencioas y 7 para raíces, si los cambias deberás adecuar en el código dichos cambios) el código es más o menos éste:
Private Sub ComOperacion_Click(Index As Integer)
Dim t1 As Single ' para hacer una breve pausa si procede
If Index = 1 Then ' operación de resetear la operación en curso (típicamente llamada Clear)
paso = 1
operando1 = 0
operando2 = 0
Operacion = 0
Text1.Text = ""
Else
If paso = 1 Or paso = 3 Then
If paso = 1 Then
operando1 = Val(Text1.Text)
Text1.Text = ComOperacion(Index).Caption
paso = 2
Operacion = Index
Else
' recogemos el operando 2 y calculamos
Operando2 = Val(Text1.Text)
Text1.Text = Calcular
' el resultado se toma como operand1, salvo que se borre.
Operando1 = Val(Text1.Text)
Paso = 2
Me.Enabled = False
Text1.ForeColor = vbRed
' proporcionamos una espera de 3 segundos para ver el resultado
t1 = Timer
Do
DoEvents
Loop While (Timer - t1) < 2
If Index <> 0 Then ' miramos que operación se ha elegido
Text1.Text = ComOperacion(Index).Caption ' después de la pausa colocamos el nuevo operador en el visor
Operacion = Index
End If
Text1.ForeColor = vbGreen
Me.Enabled = True
End If
Else
Operacion = Index
Text1.Text = ComOperacion(Index).Caption
End If
End If
End Sub
Ya sólo falta el código de la función de cálculo, sólo te pongo las 6 operaciones más comunes el resto va de tu cuenta... (si, también te pongo las raíces)
nota que los códigoos de operación 0 y 1 no son operaciones de cálculo si no de control... 0 solicita calcular el resultado y 1 limpia el visor y establece todos los valores a valores por defecto.
Private Function Calcular() As String
Dim resul As Double, k as byte
Select Case Operacion
Case 2 ' sumar
Calcular = CStr(operando1 + operando2)
Case 3 ' Restar
Calcular = CStr(operando1 - operando2)
Case 4 ' Multiplica
Calcular = CStr(operando1 * operando2)
Case 5 ' Dividir
If operando2 <> 0 Then
Calcular = CStr(operando1 / operando2)
Else
Calcular = "División por 0 - Error"
End If
Case 6 ' potencias
resul = operando1
For k = 1 To operando2
resul = resul * operando1
Next
Calcular = CStr(resul)
' ' si no quieres calcular con el bucle
' Calcular = CStr(operando1 ^ operando2)
Case 7 ' raíces
Calcular = CStr(operando1 ^ (1 / operando2))
Case 8 '''''
' otros cálculos.....
End Select
End Function
Finalmente para que quede todo bien le damos vistosidad al visor.... No se si tendrás la fuente llamada LCDD
Private Sub Form_Load()
Me.ScaleMode = vbPixels
Me.FontName = "LcdD" ' fuente que elegimos,
Me.FontSize = 16
Me.FontBold = True ' negrita
With Text1
.BackColor = vbBlack ' fondo del visor en negro, por supuesto
.ForeColor = vbGreen ' texto en verde, por supuesto
.FontBold = True
.FontName = "LcdD"
.FontSize = 16
.MaxLength = 10 ' sólo admite 10 cifras...
.Alignment = vbRightJustify ' texto alineado a la derecha, por supuesto
.Height = Me.TextHeight("9") + 4 ' damos tamaño al textbox, para que no quede desproporcionado con la feunte elegida.
.Width = Me.TextWidth("División por cero - ERROR ") ' sólo admitimos 10 cifras, pero este texto es lo más largo que saldrá...
End With
End Sub
Nota que no he declarado las variables que usamos, pero conviene que las declares (paso, operando1, operando2 y operacion)
El código no está probado por lo que no se descarta que haya algún error o no funcione del todo como se espera, ya es cosa tuya corregir y afinar detalles. También queda a tu esfuerzo añadir otras operaciones más complejas... añadir funcionalidad de decimales , errores de desbordamiento, etc... pero ya tienes un esqueleto sobre el que trabajar....
Saludos...