# Mein Taschenrechner



## ichbinneuhier (22. Februar 2008)

Ich hab den Taschenrechner aus dem Tutorial von eurer Seite gemacht und versuche den gerade etwas auszubauen. z.B mit Tasten eingeben leider bekomm ich eine Fehler Meldung ,wenn ich, num9 drücke und dann + keine probleme aber wenn ich die 2. Zahl eingebe dann bekomm ich  Laufzeitfehler 13 Typen unverträglich. Und wenn ich das Ergebnis haben will Enter drücke dann addet er die letzte Zahl dazu

```
Dim Zahler As String
Dim Zahl1 As String
Dim Rechenart As String
Dim Produkt As String



Private Sub Frame1_DragDrop(Source As Control, X As Single, Y As Single)

End Sub

Private Sub Command1_Click()
Text1 = Text1 + "1"
'Display = Display + 1
End Sub

Private Sub Command10_Click()
Text1 = Text1 + "0"
'Display = Display + 0
End Sub

Private Sub Command11_Click()
Text1 = Text1 + ","
'Display = Display + ,
End Sub

Private Sub Command12_Click()
Zahl1 = Text1.Text
'die Variable soll genau den Wert des Displays erhalten
Rechenart = "addieren"
'variable "rechenart" soll den Wert "addieren" erhalten
Text1 = ""
'Display leeren
Label3.Caption = "+"
End Sub

Private Sub Command13_Click()
Zahl1 = Text1
'die Variable soll genau den Wert des Displays erhalten
Rechenart = "subtrahieren"
'variable "rechenart" soll den Wert "addieren" erhalten
Text1 = ""
'Display leeren
Label3.Caption = "-"
End Sub

Private Sub Command14_Click()
Zahl1 = Text1
'die Variable soll genau den Wert des Displays erhalten
Rechenart = "dividieren"
'variable "rechenart" soll den Wert "addieren" erhalten
Text1 = ""
'Display leeren
Label3.Caption = "/"
End Sub

Private Sub Command15_Click()
Zahl1 = Text1
'die Variable soll genau den Wert des Displays erhalten
Rechenart = "multiplizieren"
'variable "rechenart" soll den Wert "addieren" erhalten
Text1 = ""
'Display leeren
Label3.Caption = "*"
End Sub

Private Sub Command16_Click()
If Rechenart = "addieren" Then
Text2 = CDbl(Text1) + CDbl(Zahl1)
'mit cdbl() wird der jeweilige Inhalt in Zahlen umgewandelt
ElseIf Rechenart = "subtrahieren" Then
Text2 = CDbl(Zahl1) - CDbl(Text1)
ElseIf Rechenart = "multiplizieren" Then
Text2 = CDbl(Zahl1) * CDbl(Text1)
ElseIf Rechenart = "dividieren" Then
Text2 = CDbl(Zahl1) / CDbl(Text1)
ElseIf Rechenart = "hoch" Then
    Do Until Zahler = Text1 - 1
Produkt = CDbl(Produkt) * CDbl(Zahl1)
Zahler = CDbl(Zahler) + 1
    Loop
Text2 = Produkt
End If
End Sub

Private Sub Command17_Click()
Zahl1 = ""
Text1 = ""
Text2 = ""
Zahler = 0
Produkt = 0
Rechenart = ""
Label3.Caption = ""
Label2.Caption = ""
End Sub

Private Sub Command18_Click()
Text2 = CDbl(Text1) * CDbl(Text1)
End Sub

Private Sub Command19_Click()
Zahl1 = Text1
Produkt = Text1
Zahler = 0
'die Variable soll genau den Wert des Displays erhalten
Rechenart = "hoch"
Text1 = ""
Label3.Caption = "^"
End Sub

Private Sub Command2_Click()
Text1 = Text1 + "2"
'Display = Display + 2
End Sub

Private Sub Command20_Click()
Text2 = Text1 * Text1 * Text1

End Sub

Private Sub Command21_Click()
Text1 = Text2
End Sub

Private Sub Command22_Click()
Help.Label1.Caption = "Clear Displays"
Help.Show
End Sub

Private Sub Command23_Click()
Help.Label1.Caption = "Quadrieren"
Help.Show
End Sub

Private Sub Command24_Click()
Help.Label1.Caption = "Hoch 3 nehmen"
Help.Show
End Sub

Private Sub Command25_Click()
Help.Label1.Caption = "hoch"
Help.Show
End Sub

Private Sub Command3_Click()
Text1 = Text1 + "3"
'Display = Display + 3
End Sub

Private Sub Command4_Click()
Text1 = Text1 + "4"
'Display = Display + 4
End Sub

Private Sub Command5_Click()
Text1 = Text1 + "5"
'Display = Display + 5
End Sub

Private Sub Command6_Click()
Text1 = Text1 + "6"
'Display = Display + 6
End Sub

Private Sub Command7_Click()
Text1 = Text1 + "7"
'Display = Display + 7
End Sub

Private Sub Command8_Click()
Text1 = Text1 + "8"
'Display = Display + 8
End Sub

Private Sub Command9_Click()
Text1 = Text1 + "9"
'Display = Display + 9
End Sub

Private Sub Timer1_Timer()
Label2.Caption = Zahl1
Label4.Caption = Text1
Label5.Caption = Text2
End Sub

Private Sub Form_Load()
Me.KeyPreview = True
Zahler = 0
End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyNumpad1 Or KeyCode = vbKey1 Then
Timer2.Enabled = True
End If
If KeyCode = vbKey2 Or KeyCode = vbKeyNumpad2 Then
Timer3.Enabled = True
End If
If KeyCode = vbKey3 Or KeyCode = vbKeyNumpad3 Then
Timer4.Enabled = True
End If
If KeyCode = vbKey4 Or KeyCode = vbKeyNumpad4 Then
Timer5.Enabled = True
End If
If KeyCode = vbKey5 Or KeyCode = vbKeyNumpad5 Then
Timer6.Enabled = True
End If
If KeyCode = vbKey6 Or KeyCode = vbKeyNumpad6 Then
Timer7.Enabled = True
End If
If KeyCode = vbKey7 Or KeyCode = vbKeyNumpad7 Then
Timer8.Enabled = True
End If
If KeyCode = vbKey8 Or KeyCode = vbKeyNumpad8 Then
Timer9.Enabled = True
End If
If KeyCode = vbKey9 Or KeyCode = vbKeyNumpad9 Then
Timer10.Enabled = True
End If
If KeyCode = vbKey0 Or KeyCode = vbKeyNumpad0 Then
Timer11.Enabled = True
End If
If KeyCode = vbKeyAdd Then
Timer12.Enabled = True
End If
If KeyCode = vbKeySubtract Then
Timer13.Enabled = True
End If
If KeyCode = vbKeyDivide Then
Timer14.Enabled = True
End If
If KeyCode = vbKeyMultiply Then
Timer15.Enabled = True
End If
If KeyCode = vbKeySeparator Or vbKeyReturn Then
Timer16.Enabled = True
End If
End Sub

Private Sub Timer10_Timer()
Command9_Click
Timer10.Enabled = False
End Sub

Private Sub Timer11_Timer()
Command10_Click
Timer11.Enabled = False
End Sub

Private Sub Timer12_Timer()
Command12_Click
Timer12.Enabled = False
End Sub

Private Sub Timer13_Timer()
Command13_Click
Timer13.Enabled = False
End Sub

Private Sub Timer14_Timer()
Command14_Click
Timer14.Enabled = False
End Sub

Private Sub Timer15_Timer()
Command15_Click
Timer15.Enabled = False
End Sub

Private Sub Timer16_Timer()
Command16_Click
Timer16.Enabled = False
End Sub

Private Sub Timer2_Timer()
Command1_Click
Timer2.Enabled = False
End Sub

Private Sub Timer3_Timer()
Command2_Click
Timer3.Enabled = False
End Sub

Private Sub Timer4_Timer()
Command3_Click
Timer4.Enabled = False
End Sub

Private Sub Timer5_Timer()
Command4_Click
Timer5.Enabled = False
End Sub

Private Sub Timer6_Timer()
Command5_Click
Timer6.Enabled = False
End Sub

Private Sub Timer7_Timer()
Command6_Click
Timer7.Enabled = False
End Sub

Private Sub Timer8_Timer()
Command7_Click
Timer8.Enabled = False
End Sub

Private Sub Timer9_Timer()
Command8_Click
Timer9.Enabled = False
End Sub
```


----------



## ichbinneuhier (23. Februar 2008)

hat den niemand ne Lösung


----------



## DrSoong (23. Februar 2008)

Wieso verwendest du die Timer-Variante, um die Click-Prozeduren aufzurufen? Ruf die Prozeduren doch direkt auf, ist ressourcenschonender.

Zum Problem, du versuchst einen leeren String in eine Double-Zahl zu wandeln, das mag VB nicht. Füg einfach ein *Val()* dazu, damit wandelst du den String erst mal in eine Zahl und erst dann in eine Double-Zahl um:

```
Private Sub Command16_Click()
If Rechenart = "addieren" Then
Text2 = CDbl(Val(Text1)) + CDbl(Zahl1)
'mit cdbl() wird der jeweilige Inhalt in Zahlen umgewandelt
ElseIf Rechenart = "subtrahieren" Then
Text2 = CDbl(Zahl1) - CDbl(Val(Text1))
ElseIf Rechenart = "multiplizieren" Then
Text2 = CDbl(Zahl1) * CDbl(Val(Text1))
ElseIf Rechenart = "dividieren" Then
Text2 = CDbl(Zahl1) / CDbl(Val(Text1))
ElseIf Rechenart = "hoch" Then
    Do Until Zahler = Text1 - 1
Produkt = CDbl(Produkt) * CDbl(Zahl1)
Zahler = CDbl(Zahler) + 1
    Loop
Text2 = Produkt
End If
End Sub
```


Der Doc!


----------

