VB・プログラミング初心者です。
練習でVBで電卓を作成してみています。
「数字ボタン0~9」+「演算子」+「数字ボタン0~9」+「=」でテキストボックスに結果を表示することはできますが、
「=」で計算結果を出した後、「計算結果」+「演算子」+「数字ボタン」+「=」で結果を表示しようとすると、前に計算した結果の最後の演算子を記憶したまま計算してしまうようで、
1+2-3=-1 は正しく結果が出るのですが、
1+2-3=-1+4=-5 になってしまいます。
ちなみに1+2×3=9+4=36 と+4が×4と計算されているようです。
色々考え試してみたのですが上手くいきません。
作成したコードを下記に記載します。
お知恵を御貸し頂ければ幸いです。
Public Class Dentaku
Dim ans As Single '演算子の前に入力された数値 Dim kei As Integer '計算式 Dim entstr As String '直前のボタンを記憶する変数 Dim num As Integer '演算子の後に入力された数値 '「1」ボタン Private Sub btn1_click(sender As Object, e As EventArgs) Handles Btn1.Click If entstr >= "0" And entstr <= "9" Then ' 直前の押されたのが数字ボタンのとき If LblAnser.Text.Length < 8 Then ' かつ、8桁未満の数値が入力されているとき LblAnser.Text = LblAnser.Text & "1" End If Else LblAnser.Text = "1" ' 直前の押されたのが数字以外のボタンのとき End If entstr = entstr & "1" End Sub '「2」ボタン Private Sub btn2_click(sender As Object, e As EventArgs) Handles Btn2.Click If entstr >= "0" And entstr <= "9" Then If LblAnser.Text.Length < 8 Then LblAnser.Text = LblAnser.Text & "2" End If Else LblAnser.Text = "2" End If entstr = entstr & "2" End Sub '「3」ボタン Private Sub btn3_click(sender As Object, e As EventArgs) Handles Btn3.Click If entstr >= "0" And entstr <= "9" Then If LblAnser.Text.Length < 8 Then LblAnser.Text = LblAnser.Text & "3" End If Else LblAnser.Text = "3" End If entstr = entstr & "3" End Sub '「4」ボタン Private Sub btn4_click(sender As Object, e As EventArgs) Handles Btn4.Click If entstr >= "0" And entstr <= "9" Then If LblAnser.Text.Length < 8 Then LblAnser.Text = LblAnser.Text & "4" End If Else LblAnser.Text = "4" End If entstr = entstr & "4" End Sub '「5」ボタン Private Sub btn5_click(sender As Object, e As EventArgs) Handles Btn5.Click If entstr >= "0" And entstr <= "9" Then If LblAnser.Text.Length < 8 Then LblAnser.Text = LblAnser.Text & "5" End If Else LblAnser.Text = "5" End If entstr = entstr & "5" End Sub '「6」ボタン Private Sub btn6_click(sender As Object, e As EventArgs) Handles Btn6.Click If entstr >= "0" And entstr <= "9" Then If LblAnser.Text.Length < 8 Then LblAnser.Text = LblAnser.Text & "6" End If Else LblAnser.Text = "6" End If entstr = entstr & "6" End Sub '「7」ボタン Private Sub btn7_click(sender As Object, e As EventArgs) Handles Btn7.Click If entstr >= "0" And entstr <= "9" Then If LblAnser.Text.Length < 8 Then LblAnser.Text = LblAnser.Text & "7" End If Else LblAnser.Text = "7" End If entstr = entstr & "7" End Sub '「8」ボタン Private Sub btn8_click(sender As Object, e As EventArgs) Handles Btn8.Click If entstr >= "0" And entstr <= "9" Then If LblAnser.Text.Length < 8 Then LblAnser.Text = LblAnser.Text & "8" End If Else LblAnser.Text = "8" End If entstr = entstr & "8" End Sub '「9」ボタン Private Sub btn9_click(sender As Object, e As EventArgs) Handles Btn9.Click If entstr >= "0" And entstr <= "9" Then If LblAnser.Text.Length < 8 Then LblAnser.Text = LblAnser.Text & "9" End If Else LblAnser.Text = "9" End If entstr = entstr & "9" End Sub '「0」ボタン Private Sub btn0_click(sender As Object, e As EventArgs) Handles Btn0.Click If entstr >= "0" And entstr <= "9" Then If LblAnser.Text.Length < 8 Then LblAnser.Text = LblAnser.Text & "0" End If entstr = entstr & "0" Else LblAnser.Text = "0" End If End Sub '+ボタン Private Sub Btn_Add_click(sender As Object, e As EventArgs) Handles Btn_Add.Click If IsNumeric(entstr) = True Then 'entstrが数値の時trueを返します num = CSng(entstr) 'entstrをsingleに変換 Else Exit Sub End If entstr = "" Select Case kei Case 1 ans = ans + num Case 2 ans = ans - num Case 3 ans = ans * num Case 4 If num = 0 Then Exit Sub ans = ans / num Case Else ans = num End Select kei = 1 '加算 End Sub '-ボタン Private Sub Btn_Sub_click(sender As Object, e As EventArgs) Handles Btn_Sub.Click If IsNumeric(entstr) = True Then 'entstrが数値の時trueを返します num = CSng(entstr) 'entstrをsingleに変換 Else Exit Sub End If entstr = "" Select Case kei Case 1 ans = ans + num Case 2 ans = ans - num Case 3 ans = ans * num Case 4 If num = 0 Then Exit Sub ans = ans / num Case Else ans = num End Select kei = 2 '減算 End Sub '*ボタン Private Sub Btn_Mult_click(sender As Object, e As EventArgs) Handles Btn_Mult.Click If IsNumeric(entstr) = True Then 'entstrが数値の時trueを返します num = CSng(entstr) 'entstrをsingleに変換 Else Exit Sub End If entstr = "" Select Case kei Case 1 ans = ans + num Case 2 ans = ans - num Case 3 ans = ans * num Case 4 If num = 0 Then Exit Sub ans = ans / num Case Else ans = num End Select kei = 3 '乗算 End Sub '/ボタン Private Sub Btn_Division_click(sender As Object, e As EventArgs) Handles Btn_Division.Click If IsNumeric(entstr) = True Then 'entstrが数値の時trueを返します num = CSng(entstr) 'entstrをsingleに変換 Else Exit Sub End If entstr = "" Select Case kei Case 1 ans = ans + num Case 2 ans = ans - num Case 3 ans = ans * num Case 4 If num = 0 Then Exit Sub ans = ans / num Case Else ans = num End Select kei = 4 '除算 End Sub '=ボタン Private Sub Btn_Equal_click(sender As Object, e As EventArgs) Handles Btn_Equal.Click Dim num As Single If IsNumeric(entstr) = True Then num = CSng(entstr) Else Exit Sub End If entstr = "" Select Case kei Case 1 ans = ans + num Case 2 ans = ans - num Case 3 ans = ans * num Case 4 If num = 0 Then Exit Sub ans = ans / num Case Else ans = num End Select LblAnser.Text = CStr(ans) 'テキストボックスに結果を表示 End Sub 'C(クリア)ボタン Private Sub Btn_Clear_click(sender As Object, e As EventArgs) Handles Btn_Clear.Click LblAnser.Text = 0 kei = 0 entstr = "" ans = 0 End Sub
End Class

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。