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

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

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

.NETとは、主に.NET Frameworkと呼ばれるアプリケーションまたは開発環境を指します。CLR(共通言語ランタイム)を搭載し、入力された言語をCIL(共通中間言語)に変換・実行することが可能です。そのため、C#やPythonなど複数の言語を用いることができます。

Visual Basic .NET

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

Q&A

解決済

1回答

490閲覧

.NETのクラスの扱いがわからない。

mokimokio

総合スコア53

.NET

.NETとは、主に.NET Frameworkと呼ばれるアプリケーションまたは開発環境を指します。CLR(共通言語ランタイム)を搭載し、入力された言語をCIL(共通中間言語)に変換・実行することが可能です。そのため、C#やPythonなど複数の言語を用いることができます。

Visual Basic .NET

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

0グッド

0クリップ

投稿2022/05/20 03:38

編集2022/05/20 04:42

現在.NETの勉強をしているものです。
Windows Forms アプリを Visual Studio 2019 でフレームワークを .NET Framework 4.7.2 で作っています。

テキストボックス6つを設置し各テキストボックスに500円、百円、五十円、十円、五円、一円の枚数を入力できるようにしました。
ここに各コインの枚数を入力してボタンを押すたびに自分で作ったCoinCaseクラスにそれぞれの種類のコインの枚数を記録して増やしていけるようにしたいと思っています。

そこで下記コードを作成したのですが、なぜかボタンを押すたびにクラス内のdataが初期化されています。
本当はボタンを押すたびに過去の枚数+入力した枚数としていきたいのですが、、、

どなたか解決方法教えてください。よろしくお願いします!

Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim t500 As Integer = TextBox1.Text Dim t100 As Integer = TextBox2.Text Dim t50 As Integer = TextBox3.Text Dim t10 As Integer = TextBox4.Text Dim t5 As Integer = TextBox5.Text Dim t1 As Integer = TextBox6.Text Dim tyokin10 As New CoinCase tyokin10.AddCoins(t500, t100, t50, t10, t5, t1) Label1.Text = tyokin10.count Label2.Text = tyokin10.data500 Label3.Text = tyokin10.data100 Label4.Text = tyokin10.data50 Label5.Text = tyokin10.data10 Label6.Text = tyokin10.data5 Label7.Text = tyokin10.data1 End Sub End Class Class CoinCase Public Property data500 As Integer Public Property data100 As Integer Public Property data50 As Integer Public Property data10 As Integer Public Property data5 As Integer Public Property data1 As Integer Public Property count As Integer Public Sub AddCoins( dt500count As Integer, dt100count As Integer, dt50count As Integer, dt10count As Integer, dt5count As Integer, dt1count As Integer ) count += 1 data500 += dt500count data100 += dt100count data50 += dt50count data10 += dt10count data5 += dt5count data1 += dt1count End Sub End Class

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/05/20 03:43

質問する際は何を何で作っているかを書きましょう。(例: Windows Forms アプリを Visual Studio 2022 でフレームワークを .NET Framework 4.8 として作っています・・・とか)
Zuishin

2022/05/20 03:51

> そこで下記コードを作成したのですが、なぜかボタンを押すたびにクラス内のdataが初期化されています。 コンパイルエラーになりません?
mokimokio

2022/05/20 03:51

ありがとうございます!追記しました!
mokimokio

2022/05/20 03:55

はい、コンパイルエラーにはなっておりません。。。。
退会済みユーザー

退会済みユーザー

2022/05/20 03:58 編集

> なぜかボタンを押すたびにクラス内のdataが初期化されています。 というのはコードのボタンクリックイベントのハンドラ Button1_Click で、 Dim tyokin10 As New CoinCase と、ボタンクリックのたび毎回新しいインスタンスを作っているからでは? そのあたりを見なおしてみてはいかがですか?
退会済みユーザー

退会済みユーザー

2022/05/20 03:57

> ありがとうございます!追記しました! 見当たりませんが?
Zuishin

2022/05/20 04:04

> Dim t500 As Integer = TextBox1.Text option strict を使わなければこういうことができるんですね。 今書いたのは本題とは関係ないので無視してください。
退会済みユーザー

退会済みユーザー

2022/05/20 04:05

> 環境はmicrosoft.NET SDK 5.0.406(x64) from Visual Studio .NET 5.0 ということですか? .NET Framework ではなくて。その情報が重要なんですけど。
mokimokio

2022/05/20 04:08

https://gastec-soft.com/cmcd_200/net_framework_check.html 上記URLの記事を見て実行した結果 書いていたのがmicrosoft.NET SDK 5.0.406(x64) from Visual Studio だったのでそう書きました汗 .NET Frameworkという記載が自分のパソコンにはこの手順の結果にはなかったので、、、
退会済みユーザー

退会済みユーザー

2022/05/20 04:24 編集

質問を書き直したようですが、回答が付いた後は絶対に止めてください。話の辻褄が合わなくなりますので。あとからここを訪れた人が上から読んでいった場合、BeatStar さんの回答を見て「何を言ってるの?」ということになります。 どうしても正解を書いておきたいということなら、元の質問はそのままで、追記という形でかつ回答を見て直した結果ということを明記してください。
退会済みユーザー

退会済みユーザー

2022/05/20 04:28

今後のために覚えておいてください。 > .NET Frameworkという記載が自分のパソコンにはこの手順の結果にはなかったので、、、 Visual Studio 2019 のテンプレートを使ってプロジェクトを作成したと思いますが、であればその時自分で指定するので分かるはずです。 分からないまま作ってしまったという人も時々いますけど、その場合はソリューションエクスプローラーでプロジェクト名を右クリックして出てくるメニューで「プロパティ」を選んで表示すると、「ターゲットフレームワーク」という項目があるので、それを見てください。
mokimokio

2022/05/20 04:43

コードの修正をもとに戻す。 フレームワークのバージョン明記 ともに修正しました! フレームワークのバージョンの見かたも分かっていなかったので大変助かりました!ありがとうございます!
guest

回答1

0

ベストアンサー

当たり前じゃないの?
そもそも.NETだからとか関係ないし。

コードを読むと、

VB

1Public Class Form1 2 3 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 4 Dim t500 As Integer = TextBox1.Text 5 Dim t100 As Integer = TextBox2.Text 6 Dim t50 As Integer = TextBox3.Text 7 Dim t10 As Integer = TextBox4.Text 8 Dim t5 As Integer = TextBox5.Text 9 Dim t1 As Integer = TextBox6.Text 10 Dim tyokin10 As New CoinCase ' ← これ!!!!!!!! 11 12 tyokin10.AddCoins(t500, t100, t50, t10, t5, t1) 13 Label1.Text = tyokin10.count 14 Label2.Text = tyokin10.data500 15 Label3.Text = tyokin10.data100 16 Label4.Text = tyokin10.data50 17 Label5.Text = tyokin10.data10 18 Label6.Text = tyokin10.data5 19 Label7.Text = tyokin10.data1 20 End Sub 21 22End Class

とあるけど、「' ← これ!!!!!!!!」の部分の行。
これが原因では?

そもそもButton1_Clickメソッドはどういうメソッドでしょうか?
Button1とやらの定義が記述されていませんが、名前からするとボタン(プッシュボタン)ですよね。それのイベント。
つまり「ボタンが押されたときに起動するイベント」。

ということは、「ボタンが押されるごとに起動するメソッド」。そのメソッド内でNewしていたらそりゃあ初期化されるでしょ。

たとえば一回目のNewしたものを便宜上、obj1とし、二回目のNewではobj2…とすると、
ボタンを一回押すと obj1 が生成されて処理。さらに二回目押せばobj2が生成されてこれで処理。三回目押したらobj3が生成されてこれで処理。…と別々のオブジェクトが作られている状態です。
そりゃあ同じ値になるのでは?

投稿2022/05/20 03:55

BeatStar

総合スコア4958

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

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

mokimokio

2022/05/20 04:03

ありがとうございます!自分では気づけませんでいたがそこが原因でした! ボタンイベントの前にコードを移動することで思っていた挙動となりました!
退会済みユーザー

退会済みユーザー

2022/05/20 04:23 編集

質問を書き直したようですが、回答が付いた後は絶対に止めてください。話の辻褄が合わなくなりますので。あとからここを訪れた人が上から読んでいった場合、BeatStar さんの回答を見て「何を言ってるの?」ということになります。 どうしても正解を書いておきたいということなら、元の質問はそのままで、追記という形でかつ回答を見て直した結果ということを明記してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問