質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.24%

VB.net 電卓プログラム 連続計算

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 3,168

ShinMutazono

score 9

前提・実現したいこと

電卓プログラムを作っているのですが、1+2+3+4+などの連続した計算処理
を書くことができません。
= の処理のところにIF文を書くと思ったのですが、分かりません。
アドバイスの方お願いいたします。

コメント インデントがまだ未完全ですが、すみませんがよろしくお願いします。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

Public Class Form2
'変数宣言   
Private mode As String
Private taihi As String
Private cmd As String
Private hozon As String

Private Sub Keisan(Tasu As String)

Select Case cmd
Case "+", "-", "/", "*"
TextBox1.Text = Tasu.ToString()

cmd = ""
Case Else
If TextBox1.Text = "0" Then
TextBox1.Text = Tasu.ToString()
Else
TextBox1.Text &= Tasu.ToString()

End If
End Select

End Sub
Private Sub BtnOne_Click(sender As Object, e As EventArgs) Handles btn1.Click

Keisan("1")

End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles btn2.Click
Keisan("2")

End Sub
'1~9のメソッド呼び出し
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles btn3.Click
Keisan("3")
End Sub

Private Sub Button4_Click(sender As Object, e As EventArgs) Handles btn4.Click
Keisan("4")
End Sub

Private Sub Button5_Click(sender As Object, e As EventArgs) Handles btn5.Click

Keisan("5")
End Sub

Private Sub btn6_Click(sender As Object, e As EventArgs) Handles btn6.Click

Keisan("6")
End Sub

Private Sub btn7_Click(sender As Object, e As EventArgs) Handles btn7.Click

Keisan("7")
End Sub
Private Sub btn8_Click(sender As Object, e As EventArgs) Handles btn8.Click
Keisan("8")
End Sub
Private Sub btn9_Click(sender As Object, e As EventArgs) Handles btn9.Click
Keisan("9")
End Sub
Private Sub btn0_Click(sender As Object, e As EventArgs) Handles btn0.Click
Keisan("0")
End Sub

Private Sub btn00_Click(sender As Object, e As EventArgs) Handles btn00.Click
Keisan("00")
End Sub

Private Sub Form2_Load(sender As Object, e As EventArgs) Handles Me.Load
TextBox1.Text = "0"
mode = ""
cmd = ""
taihi = ""
End Sub

Private Sub btnDel_Click(sender As Object, e As EventArgs) Handles btnDel.Click
If TextBox1.Text >= "0" And Text <= "9" Then

End If
If TextBox1.Text = "C" Then
End If
End Sub

Private Sub ButtonPlus_Click(sender As Object, e As EventArgs) Handles ButtonPlus.Click
taihi = TextBox1.Text
cmd = "+"
mode = "+"

End Sub

Private Function Geta() As Integer
Throw New NotImplementedException()
End Function

Private Function d() As Object
Throw New NotImplementedException()
End Function

Private Function Getope() As String

End Function

Private Sub btnPoint_Click(sender As Object, e As EventArgs) Handles btnPoint.Click

End Sub

Private Sub ButtonCancel_Click(sender As Object, e As EventArgs) Handles ButtonCancel.Click
mode = ""
cmd = ""
hozon = ""
taihi = ""
TextBox1.Text = "0"

End Sub

Private Sub ButtonMinus_Click(sender As Object, e As EventArgs) Handles ButtonMinus.Click
taihi = TextBox1.Text

cmd = "-"
mode = "-"
End Sub

Private Sub ButtonEqual_Click(sender As Object, e As EventArgs) Handles ButtonEqual.Click

Dim a As Integer = Integer.Parse(taihi)
Dim b As Integer = Integer.Parse(TextBox1.Text)

If hozon = "" Then
hozon = TextBox1.Text
Else
b = Integer.Parse(hozon)
End If

Select Case mode
Case "+"
Dim intTotal As Integer = a + b
TextBox1.Text = intTotal.ToString()
Case "-"
Dim inthiku As Integer = a - b
TextBox1.Text = inthiku.ToString()

Case "*"
Dim intkakeru As Integer = a * b
TextBox1.Text = intkakeru.ToString()
Case "/"
Dim intwaru As Integer = a \ b
TextBox1.Text = intwaru.ToString()
End Select

taihi = TextBox1.Text

End Sub

Private Sub Form2_HandleDestroyed(sender As Object, e As EventArgs) Handles Me.HandleDestroyed

End Sub

Private Sub ButtonDiv_Click(sender As Object, e As EventArgs) Handles ButtonDiv.Click
taihi = TextBox1.Text
cmd = "/"
mode = "/"
End Sub

Private Sub ButtonMul_Click(sender As Object, e As EventArgs) Handles ButtonMul.Click
taihi = TextBox1.Text
cmd = "*"
mode = "*"
End Sub
End Class

試したこと

新たに保存しておく用の変数を作ろうとしたがうまく動かなかった。

補足情報(言語/FW/ツール等のバージョンなど)

より詳細な情報

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • coco_bauer

    2017/07/25 17:45

    「1+2+3+4+などの連続した計算処理」というのは、どのような動作を想定しているのでしょうか? 質問のコードを見ると、電卓のキーが押されるたびに処理が進むようなので、"1+2+3+4+"は八つの処理(八つのキーを押す操作)に分かれたものにしかならないと思われます。

    キャンセル

回答 2

checkベストアンサー

0

アドバイスとしては、まとめてやらずに1個づつ計算結果を出力して、
演算子が入力された時点で計算結果を、更新するみたいな流れが楽かと(windows付属の電卓方式)

実装イメージが逆で計算結果をtextに出力していて、入力された数字が退避に入れる感じです。
で、記号が入力されたらtext(いままでの答え)と退避で計算した結果をtextに出力する。

なので、1+2*3 が、9と出力されます。
イメージ説明

あとは、VB.netとevalで検索するとトリッキーな方法もでてきます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

ベストアンサー付いてますが、こんな方法もあるよ、というカキコです。

文字列の計算式の計算結果を取得する
https://dobon.net/vb/dotnet/programing/eval.html
↑有名な「DOBON.NET プログラミング道」さんのサイトです。

Microsoft Script Controlを使用する方法
は、古くから使われて来た方法です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/07/25 19:17

    ありがとうございます。
    ぜひ参考にさせていただきます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.24%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る