2015-05-13 3 views
-2

Я новый для программирования. Это мой визуальный базовый код для расширенного калькулятора. Я не знаю, как исправить проблему, я думаю, что мне нужно преобразовать textbox1 в interger, поскольку это строка, но я не знаю, как это сделать. Спасибо за помощь!'System.InvalidCastException' произошел в Microsoft.VisualBasic.dll Calculator

Option Explicit On 
Public Class Form1 
Dim op, FirstNumber As Integer 
Dim K As Double 
Dim I As Double 
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    If TextBox1.Text = "0" Then 
     TextBox1.Text = "1" 
    Else 
     TextBox1.Text = TextBox1.Text & "1" 
    End If 

End Sub 

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 
    If TextBox1.Text = "0" Then 
     TextBox1.Text = "2" 
    Else 
     TextBox1.Text = TextBox1.Text & "2" 
    End If 
End Sub 

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click 
    If TextBox1.Text = "0" Then 
     TextBox1.Text = "3" 
    Else 
     TextBox1.Text = TextBox1.Text & "3" 
    End If 
End Sub 

Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click 
    If TextBox1.Text = "0" Then 
     TextBox1.Text = "4" 
    Else 
     TextBox1.Text = TextBox1.Text & "4" 
    End If 
End Sub 

Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click 
    If TextBox1.Text = "0" Then 
     TextBox1.Text = "5" 
    Else 
     TextBox1.Text = TextBox1.Text & "5" 
    End If 
End Sub 

Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click 
    If TextBox1.Text = "0" Then 
     TextBox1.Text = "6" 
    Else 
     TextBox1.Text = TextBox1.Text & "6" 
    End If 
End Sub 

Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click 
    If TextBox1.Text = "0" Then 
     TextBox1.Text = "7" 
    Else 
     TextBox1.Text = TextBox1.Text & "7" 
    End If 
End Sub 

Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click 
    If TextBox1.Text = "0" Then 
     TextBox1.Text = "8" 
    Else 
     TextBox1.Text = TextBox1.Text & "8" 
    End If 
End Sub 

Private Sub Button9_Click(sender As Object, e As EventArgs) Handles Button9.Click 
    If TextBox1.Text = "0" Then 
     TextBox1.Text = "9" 
    Else 
     TextBox1.Text = TextBox1.Text & "9" 
    End If 
End Sub 

Private Sub Button0_Click(sender As Object, e As EventArgs) Handles Button0.Click 
    If TextBox1.Text = "0" Then 
     TextBox1.Text = "0" 
    Else 
     TextBox1.Text = TextBox1.Text & "0" 
    End If 
End Sub 

Private Sub ClearButton_Click(sender As Object, e As EventArgs) Handles ClearButton.Click 
    TextBox1.Text = "0" 
End Sub 

Private Sub DecimalButton_Click(sender As Object, e As EventArgs) Handles DecimalButton.Click 
    If TextBox1.Text = "0" Then 
     TextBox1.Text = "." 
    Else 
     TextBox1.Text = TextBox1.Text & "." 
    End If 
End Sub 

Private Sub AddButton_Click(sender As Object, e As EventArgs) Handles AddButton.Click 
    op = 1 
    FirstNumber = TextBox1.Text 
    TextBox1.Text = "" 
End Sub 

Private Sub SubtractButton_Click(sender As Object, e As EventArgs) Handles SubtractButton.Click 
    op = 2 
    FirstNumber = TextBox1.Text 
    TextBox1.Text = "" 
End Sub 

Private Sub MultiplyButton_Click(sender As Object, e As EventArgs) Handles MultiplyButton.Click 
    op = 3 
    FirstNumber = TextBox1.Text 
    TextBox1.Text = "" 
End Sub 

Private Sub DivideButton_Click(sender As Object, e As EventArgs) Handles DivideButton.Click 
    op = 4 
    FirstNumber = TextBox1.Text 
    TextBox1.Text = "" 
End Sub 

Private Sub EqualButton_Click(sender As Object, e As EventArgs) Handles EqualButton.Click 
    If op = 1 Then 
     TextBox1.Text = Val(FirstNumber) + Val(TextBox1.Text) 
    ElseIf op = 2 Then 
     TextBox1.Text = Val(FirstNumber) - Val(TextBox1.Text) 
    ElseIf op = 3 Then 
     TextBox1.Text = Val(FirstNumber) * Val(TextBox1.Text) 
    ElseIf op = 4 Then 
     TextBox1.Text = Val(FirstNumber)/Val(TextBox1.Text) 
    ElseIf op = 5 Then 
     TextBox1.Text = Val(FirstNumber) * Val(FirstNumber) 
    ElseIf op = 6 Then 
     TextBox1.Text = Math.Sqrt(Val(FirstNumber)) 
    ElseIf op = 7 Then 
     TextBox1.Text = Val(FirstNumber)^(1/3) 
    ElseIf op = 8 Then 
     TextBox1.Text = Val(FirstNumber) * Val(FirstNumber) * Val(FirstNumber) 
    ElseIf op = 9 Then 
     TextBox1.Text = Math.Tan(Val(FirstNumber)) 
    ElseIf op = 10 Then 
     TextBox1.Text = Math.Cos(Val(FirstNumber)) 
    ElseIf op = 11 Then 
     TextBox1.Text = Math.Sin(Val(FirstNumber)) 
    End If 
End Sub 

Private Sub ExitButton_Click(sender As Object, e As EventArgs) Handles ExitButton.Click 
    Me.Close() 
End Sub 

Private Sub SQButton_Click(sender As Object, e As EventArgs) Handles SQButton.Click 
    op = 5 
    FirstNumber = TextBox1.Text 
End Sub 

Private Sub SQRButton_Click(sender As Object, e As EventArgs) Handles SQRButton.Click 
    op = 6 
    FirstNumber = TextBox1.Text 
End Sub 

Private Sub Sqr3Button_Click(sender As Object, e As EventArgs) Handles Sqr3Button.Click 
    op = 7 
    FirstNumber = TextBox1.Text 
End Sub 

Private Sub CubeButton_Click(sender As Object, e As EventArgs) Handles CubeButton.Click 
    op = 8 
    FirstNumber = TextBox1.Text 
End Sub 

Private Sub TanButton_Click(sender As Object, e As EventArgs) Handles TanButton.Click 
    op = 9 
    FirstNumber = TextBox1.Text 
End Sub 

Private Sub CosButton_Click(sender As Object, e As EventArgs) Handles CosButton.Click 
    op = 10 
    FirstNumber = TextBox1.Text 
End Sub 

Private Sub SinButton_Click(sender As Object, e As EventArgs) Handles SinButton.Click 
    op = 11 
    FirstNumber = TextBox1.Text 
End Sub 

Private Sub PiButton_Click(sender As Object, e As EventArgs) Handles PiButton.Click 
    If TextBox1.Text = "0" Then 
     TextBox1.Text = "3.14159265359" 
    Else 
     TextBox1.Text = TextBox1.Text & "3.14159265359" 
    End If 
End Sub 

Private Sub BackSpaceButton_Click(sender As Object, e As EventArgs) Handles BackSpaceButton.Click 
    TextBox1.Focus() 
    SendKeys.Send("{BackSpace}") 
End Sub 
End Class 
+0

Можете ли вы сделать [Минимальный полный проверяемый пример] (http://stackoverflow.com/help/mcve), который производит ту же ошибку? – Cecilia

+1

Добавьте «Option Strict On» в код (или включите его в свойствах проекта) и начните ошибки исправления. Вы также должны использовать 'Convert.ToInt32' или' CInt' вместо 'Val'. В коде есть много типов конверсий. Точно там, где это происходит, было бы полезно. – Plutonix

+0

В дополнение к другим комментариям было бы лучше использовать 'Double' для ваших вычислений, особенно если вы собираетесь использовать такие значения, как PI. –

ответ

0

В некоторых из подпрограмм, то лучше использовать DOUBLE типов, а не целочисленные тип, тем более, что у вас есть десятичная точка который используется (как указано Chris)

Для простоты я изменил свой целочисленный тип до SINGLE , если вы получите ошибку переполнения, затем измените его на два вместо

Что касается изменений, вы можете найти их ниже.

Dim op as integer 
Dim FirstNumber As double 
Dim Result As Double 


Private Sub EqualButton_Click(sender As Object, e As EventArgs) Handles EqualButton.Click 
    If op = 1 Then 
    Result = Cdbl(FirstNumber) + Cdbl(TextBox1.Text) 
    TextBox1.Text = Str(result) 
    ElseIf op = 2 Then 
    Result = Cdbl(FirstNumber) - Cdbl(TextBox1.Text) 
    TextBox1.Text = Str(result) 
    ElseIf op = 3 Then 
    Result = Cdbl(FirstNumber) * Cdbl(TextBox1.Text) 
    TextBox1.Text = Str(result) 
    ElseIf op = 4 Then 
    Result = Cdbl(FirstNumber)/Cdbl(TextBox1.Text) 
    TextBox1.Text = Str(result) 
    ElseIf op = 5 Then 
    Result = Cdbl(FirstNumber) * Cdbl(FirstNumber) 
    TextBox1.Text = Str(result) 
    ElseIf op = 6 Then 
    Result = Math.Sqrt(Cdbl(FirstNumber)) 
    TextBox1.Text = Str(result) 
    ElseIf op = 7 Then 
    Result = Cdbl(FirstNumber)^(1/3) 
    TextBox1.Text = Str(result) 
    ElseIf op = 8 Then 
    Result = Cdbl(FirstNumber) * Cdbl(FirstNumber) * Cdbl(FirstNumber) 
    TextBox1.Text = Str(result) 
    ElseIf op = 9 Then 
    Result = Math.Tan(Cdbl(FirstNumber)) 
    TextBox1.Text = Str(result) 
    ElseIf op = 10 Then 
    Result = Math.Cos(Cdbl(FirstNumber)) 
    TextBox1.Text = Str(result) 
    ElseIf op = 11 Then 
    Result = Math.Sin(Cdbl(FirstNumber)) 
    TextBox1.Text = Str(result) 
    End If 
End Sub 

Private Sub SQButton_Click(sender As Object, e As EventArgs) Handles SQButton.Click 
    op = 5 
    FirstNumber = Cdbl(TextBox1.Text) 
End Sub 

Private Sub SQRButton_Click(sender As Object, e As EventArgs) Handles SQRButton.Click 
    op = 6 
    FirstNumber = Cdbl(TextBox1.Text) 
End Sub 

Private Sub Sqr3Button_Click(sender As Object, e As EventArgs) Handles Sqr3Button.Click 
    op = 7 
    FirstNumber = Cdbl(TextBox1.Text) 
End Sub 

Private Sub CubeButton_Click(sender As Object, e As EventArgs) Handles CubeButton.Click 
    op = 8 
    FirstNumber = Cdbl(TextBox1.Text) 
End Sub 

Private Sub TanButton_Click(sender As Object, e As EventArgs) Handles TanButton.Click 
    op = 9 
    FirstNumber = Cdbl(TextBox1.Text) 
End Sub 

Private Sub CosButton_Click(sender As Object, e As EventArgs) Handles CosButton.Click 
    op = 10 
    FirstNumber = Cdbl(TextBox1.Text) 
End Sub 

Private Sub SinButton_Click(sender As Object, e As EventArgs) Handles SinButton.Click 
    op = 11 
    FirstNumber = Cdbl(TextBox1.Text) 
End Sub 

Private Sub AddButton_Click(sender As Object, e As EventArgs) Handles AddButton.Click 
    op = 1 
    FirstNumber = Cdbl(TextBox1.Text) 
    TextBox1.Text = "" 
End Sub 

Private Sub SubtractButton_Click(sender As Object, e As EventArgs) Handles SubtractButton.Click 
    op = 2 
    FirstNumber = Cdbl(TextBox1.Text) 
    TextBox1.Text = "" 
End Sub 

Private Sub MultiplyButton_Click(sender As Object, e As EventArgs) Handles MultiplyButton.Click 
    op = 3 
    FirstNumber = Cdbl(TextBox1.Text) 
    TextBox1.Text = "" 
End Sub 

Private Sub DivideButton_Click(sender As Object, e As EventArgs) Handles DivideButton.Click 
    op = 4 
    FirstNumber = Cdbl(TextBox1.Text) 
    TextBox1.Text = "" 
End Sub 
Смежные вопросы