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

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

新規登録して質問してみよう
ただいま回答率
85.49%
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

5833閲覧

【VB.NET】変数の初期化について

退会済みユーザー

退会済みユーザー

総合スコア0

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2019/02/10 03:32

前提・実現したいこと

VB.NETで簡単な電卓を作ろうとしています。
変数Num()の値がイベント発生のつど0になってしまい、
何が原因なのかわからないため教えていただきたいです。

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

イベント(ボタン押下)のタイミングで変数Numの値が0になる。 ※初心者の練習ということで内容がひどいですが、 一端上記の内容だけアドバイスいただけると助かります。

該当のソースコード

VB.NET

1Public Class calculator 2 Inherits System.Web.UI.Page 3 Public Num As Long '数字を格納 4 5 Protected Sub BtnCancel_Click(sender As Object, e As EventArgs) Handles BtnCancel.Click 6 7 LblSym.Text = "" 8 LblAnswer.Text = "" 9 10 End Sub 11 12 Protected Sub BtnReverse_Click(sender As Object, e As EventArgs) Handles BtnReverse.Click 13 LblAnswer.Text = Int(LblAnswer.Text) * -1 14 15 End Sub 16 17 Protected Sub BtnPercent_Click(sender As Object, e As EventArgs) Handles BtnPercent.Click 18 LblAnswer.Text = Int(LblAnswer.Text) / 100 19 End Sub 20 21 Protected Sub BtnSeven_Click(sender As Object, e As EventArgs) Handles BtnSeven.Click 22 LblAnswer.Text = LblAnswer.Text & BtnSeven.Text 23 End Sub 24 25 Protected Sub BtnEight_Click(sender As Object, e As EventArgs) Handles BtnEight.Click 26 LblAnswer.Text = LblAnswer.Text & BtnEight.Text 27 End Sub 28 29 Protected Sub BtnNine_Click(sender As Object, e As EventArgs) Handles BtnNine.Click 30 LblAnswer.Text = LblAnswer.Text & BtnNine.Text 31 End Sub 32 Protected Sub BtnMultiplication_Click(sender As Object, e As EventArgs) Handles BtnMultiplication.Click 33 If LblSym.Text = "" Then 34 Num = Int(LblAnswer.Text) 35 LblSym.Text = "×" 36 LblAnswer.Text = "" 37 Else 38 LblAnswer.Text = Int(LblAnswer.Text) * Num 39 LblSym.Text = "" 40 End If 41 End Sub 42 43 Protected Sub BtnSix_Click(sender As Object, e As EventArgs) Handles BtnSix.Click 44 LblAnswer.Text = LblAnswer.Text & BtnSix.Text 45 End Sub 46 47 Protected Sub BtnFive_Click(sender As Object, e As EventArgs) Handles BtnFive.Click 48 LblAnswer.Text = LblAnswer.Text & BtnFive.Text 49 End Sub 50 51 Protected Sub BtnOne_Click(sender As Object, e As EventArgs) Handles BtnOne.Click 52 LblAnswer.Text = LblAnswer.Text & BtnOne.Text 53 End Sub 54 55 Protected Sub BtnTwo_Click(sender As Object, e As EventArgs) Handles BtnTwo.Click 56 LblAnswer.Text = LblAnswer.Text & BtnTwo.Text 57 End Sub 58 59 Protected Sub BtnThree_Click(sender As Object, e As EventArgs) Handles BtnThree.Click 60 LblAnswer.Text = LblAnswer.Text & BtnThree.Text 61 End Sub 62 63 Protected Sub BtnPlus_Click(sender As Object, e As EventArgs) Handles BtnPlus.Click 64 If LblSym.Text = "" Then 65 Num = Int(LblAnswer.Text) 66 LblSym.Text = "+" 67 Else 68 LblAnswer.Text = Int(LblAnswer.Text) + Num 69 LblSym.Text = "" 70 71 End If 72 End Sub 73 74 Protected Sub BtnZero_Click(sender As Object, e As EventArgs) Handles BtnZero.Click 75 If LblAnswer.Text <> "0" Then 76 LblAnswer.Text = LblAnswer.Text & BtnZero.Text 77 End If 78 End Sub 79 80 Protected Sub BtnDecimal_Click(sender As Object, e As EventArgs) Handles BtnDecimal.Click 81 If LblAnswer.Text <> 0 Then 82 LblAnswer.Text = LblAnswer.Text & "." 83 End If 84 End Sub 85 86 Protected Sub BtnEqual_Click(sender As Object, e As EventArgs) Handles BtnEqual.Click 87 If LblSym.Text = "" Then 88 Exit Sub 89 End If 90 91 If LblSym.Text = "+" Then 92 LblAnswer.Text = Num + Int(LblAnswer.Text) 93 ElseIf LblSym.Text = "-" Then 94 LblAnswer.Text = Num - Int(LblAnswer.Text) 95 ElseIf LblSym.Text = "×" Then 96 LblAnswer.Text = Num * Int(LblAnswer.Text) 97 ElseIf LblSym.Text = "÷" Then 98 LblAnswer.Text = Num / Int(LblAnswer.Text) 99 End If 100 101 LblSym.Text = "" 102 End Sub 103 104 Protected Sub BtnFour_Click(sender As Object, e As EventArgs) Handles BtnFour.Click 105 LblAnswer.Text = LblAnswer.Text & BtnFour.Text 106 End Sub 107 108 Protected Sub BtnDivision_Click(sender As Object, e As EventArgs) Handles BtnDivision.Click 109 If LblSym.Text = "" Then 110 Num = Int(LblAnswer.Text) 111 LblSym.Text = "÷" 112 Else 113 LblAnswer.Text = Num / Int(LblAnswer.Text) 114 LblSym.Text = "" 115 116 End If 117 End Sub 118 119 Protected Sub BtnMinus_Click(sender As Object, e As EventArgs) Handles BtnMinus.Click 120 If LblSym.Text = "" Then 121 Num = Int(LblAnswer.Text) 122 LblSym.Text = "-" 123 Else 124 LblAnswer.Text = Int(LblAnswer.Text) - Num 125 LblSym.Text = "" 126 127 End If 128 End Sub 129End Class 130

試したこと

変数の位置の変更など

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

VisualStudio2015

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/02/10 04:40

何を作っているか(Windows Forms? ASP.NET Web Forms? その他?)と開発環境(OS, .NET のバージョン、プロジェクト作成に使ったテンプレートは何かなど)を書きましょう。 Inherits System.Web.UI.Page となってますが、ASP.NET Web Forms アプリですか?  「イベント(ボタン押下)のタイミングで変数Numの値が0になる。」というのはどのボタンのことを言ってますか?
kenshirou

2019/02/10 06:50

実際に、変数Numの値が0であるということを、どのようにして確認しましたか? あと、本題とは関係ないのですが、乗算ボタン(×)押下時と、その他の四則演算ボタン押下時とで、処理が若干異なるようです。 (確認してはいませんが、例えば12+3を行おうとすると、+ボタンでLblAnswer.Textの内容がクリアされていないので、演算結果が12+123になってしまう?)
guest

回答2

0

ベストアンサー

質問へのコメントに返事がないので、アップされたコードの Inherits System.Web.UI.Page から ASP.NET Web Forms アプリの話だと理解して・・・

Web アプリはステートレスということは分かりますか?

初期画面がブラウザに表示された後、初期画面の html ソースを作るために Web サーバーのメモリにロードした Public Class calculator のインスタンスは全てメモリから消去されます。

ブラウザの画面でボタンをクリックするとポスト要求(ASP.NET Web Froms アプリの言葉で言うとポストバック)がかかり、その要求を受けて Web サーバーは Public Class calculator のアセンブリをメモリにロードし、ブラウザに返すための html ソースを生成します。

その時、Public Class calculator にある変数 Public Num As Long は何もない状態から初期化されます。つまり中身はゼロ 0 から始まるという訳です。

なので、ポストバックすると毎回 Num はゼロ 0 となるという訳です。

ポストバック前後で状態を保持する(Num の値を保持する)方法はあって、質問のケースでは ViewState を使うのがよさそうです。

検討してみてください。

投稿2019/02/10 11:26

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/02/18 11:38

ご回答ありがとうございます。 ポストバックで値も失われてしまうのですね。 参考書で知識としてはありましたが、実学と直結していませんでした……。 教えていただいたViewStateを使ってアプリの制作を進めたいと思います。 一番ドンピシャのご回答だったので、ベストアンサーにさせていただきます。
guest

0

BtnPercent_Click の動作がおかしいですね。いや、本題は、パーセントボタンをクリックすると、という条件付きですか?
この中で 100 で割っています。これにより、実数になります。1100 で割ると 0.01 です。これを Int() に通すと 0 になります。

投稿2019/02/10 09:36

Q71

総合スコア995

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問