現在課題としてVBで電卓を作成しています。
VBはつい最近はじめたばかりでして、まだうまく理解できていないところがありますが、ひとまずさまざまなサイトを参考にさせていただき、形だけ電卓ができました。
ただここで問題がおきています。
演算子を続けて入力したときの計算方法?がうまくいってないようです。
例をあげていえば 6+2-3というのは電卓で続けて入力すると5になりますが、現在作成している電卓では1になってしまいます。おそらく演算子あたりの判定がおかしいのだと思いますが、どのように判定を書けばいいのか皆目見当もつきません。
ぜひ、この部分だけでもご教授いただけたらと思います。
追記
問題のソース部分を記載します。
'「+」ボタンクリック処理
Private Sub BtnPlus_Click(sender As Object, e As EventArgs) Handles BtnPlus.Click
'エラー表示時の処理
If TextAns.Text = "E:桁数超過" Then
Exit Sub
End If
'13桁以下なら計算可能 If TextAns.Text.Length < 13 Then '前回入力されたのが数字の場合 If beforeIn >= "0" And beforeIn <= "9" Then If ope = "C" Then Ans = CType(TextAns.Text, Double) Else 'Ansに保存されている+ボタンクリック前の数値と加算 Num = CType(TextAns.Text, Double) Ans = Ans + Num '電卓の画面に表示 If TextAns.Text.Length >= 13 Then TextAns.Text = "E:桁数超過" Exit Sub Else TextAns.Text = Ans End If Else '前回クリックされたボタンが数値以外の場合 Select Case ope Case "C" '前回がクリアボタン Ans = CType(TextAns.Text, Double) Case "=" '前回がイコールボタン Ans = Ans + Num Case "+", "-", "*", "/" End Select End If Else MsgBox("これ以上入力できません", 48, "警告メッセージ") Exit Sub End If beforeIn = "+" ope = "+" End Sub '「-」ボタンクリック処理 Private Sub BtnMinus_Click(sender As Object, e As EventArgs) Handles BtnMinus.Click 'エラー表示時の処理 If TextAns.Text = "E:桁数超過" Then Exit Sub End If '電卓上の数値が13桁以下なら処理可能 If TextAns.Text.Length < 13 Then If beforeIn >= "0" And beforeIn <= "9" Then If ope = "C" Then '最初の数値をAnsに保存 Ans = CType(TextAns.Text, Double) Else 'Ansに保存されている-ボタンクリック前の数値と減算 Num = CType(TextAns.Text, Double) Ans = Ans - Num '電卓の画面に表示 If TextAns.Text.Length >= 13 Then TextAns.Text = "E:桁数超過" Exit Sub Else TextAns.Text = Ans End If End If Else '前回のクリックが数字以外の場合 Select Case ope Case "C" '前回がクリアボタン Ans = CType(TextAns.Text, Double) Case "=" '前回がイコールボタン Ans = Ans - Num Case "+", "-", "*", "/" End Select End If Else MsgBox("これ以上入力できません", 48, "警告メッセージ") Exit Sub End If beforeIn = "-" ope = "-" End Sub
追記いたします。
各数字ボタンの入力は下記のようになっております。
'数字ボタン「1」クリック処理
Private Sub BtnOne_Click(sender As Object, e As EventArgs) Handles BtnOne.Click
'エラー表示時の処理
If TextAns.Text = "E:桁数超過" Or TextAns.Text = "0で割ることはできません" Then
Exit Sub
End If
'もし入力されたのが数字だった場合 If beforeIn >= "0" And beforeIn <= "9" Then '直前で押されたのが数字ボタンだった場合 'かつ、12桁未満の数値が入力されているとき If TextAns.Text.Length < 13 Then TextAns.Text &= "1" Else MsgBox("これ以上入力できません", 48, "警告メッセージ") Exit Sub End If Else TextAns.Text = "1" End If beforeIn = "1" End Sub
回答3件
あなたの回答
tips
プレビュー