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

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

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

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

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

Q&A

解決済

1回答

700閲覧

数字を抜き出して合計する方法

wwwwx

総合スコア1

Visual Basic .NET

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

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

0グッド

0クリップ

投稿2022/07/19 04:41

編集2022/07/20 10:55

visual stadio 2022 visual basicについての質問です。
windows Form アプリケーションを使用しています。
listboxにて
商品名1 x1 ¥100
商品名2 x1 ¥200


のようなものを表示させるプログラムを作成しました。最後に合計金額を求めたいのですが、¥より後ろの数字を抜き出して合計金額を求める方法はありますか?

Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Connectcontrols() Connectevents() PictureBox1.Tag = "商品名1" PictureBox1.Image = Image.FromFile("test.bmp") PictureBox2.Tag = "商品名2" PictureBox2.Image = Image.FromFile("test.bmp") PictureBox3.Tag = "商品名3" PictureBox3.Image = Image.FromFile("test.bmp") End Sub Private mypicturebox() As System.Windows.Forms.PictureBox Private Sub Connectcontrols() mypicturebox = New System.Windows.Forms.PictureBox(3) {} mypicturebox(1) = PictureBox1 mypicturebox(2) = PictureBox2 mypicturebox(3) = PictureBox3 End Sub Private Sub Connectevents() For i As Integer = 1 To 3 AddHandler mypicturebox(i).Click, AddressOf mypicturebox_Click Next End Sub Private Sub Mypicturebox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Dim index As Integer = Array.IndexOf(mypicturebox, sender) If index = 1 Then Dim pbox As PictureBox = DirectCast(sender, PictureBox) Using child As New Form2() If child.ShowDialog() = DialogResult.OK Then ListBox1.Items.Add(pbox.Tag & child.StockCount & " ¥100") End If End Using End If 以下 index=3 まで行う Public Class Form2 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click _StockCount = NumericUpDown1.Value DialogResult = DialogResult.OK End Sub Private _StockCount As Decimal Public ReadOnly Property StockCount As Decimal Get Return _StockCount End Get End Property End Class

ここでは商品数3までですが実際は60まで作成しました。また最終的な合計はButtonを押すとTextBoxに表示される仕組みで考えています。修正完了しましたよろしくお願いします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/07/19 04:56

何を作っているかぐらいは書きましょう。ListBox というのは ASP.NET Web Forms, WinForms, WPF にあります。それから、.NET Framework なのか .NET Core/.NET のどっちなのかとそのバージョンを書きましょう。 さらに、あなたが自力でどこまでコードを書いて実装できていて、どこで躓いていて、何が分かれば解決するかを、あなたかがいたコードを提示するなどして説明しましょう。今の質問では丸投げでマイナス評価対象です。
KOZ6.0

2022/07/19 05:01

地道に1行ずつ "\" を文字列検索してその後ろを切り取り数値に直して合計するしかなさそうですが、どういった方法をお望みですか?
wwwwx

2022/07/19 05:22

初投稿で無知をさらしてしまい申し訳ありません。winFormsを使用しております。KOZ6.0さんがおっしゃった方法を目指しておりますが、listboxの行数が不確定であるためどう表したらいいかわからず質問させていただきました。
KOZ6.0

2022/07/19 05:27

ListBox の行数は ListBox.Items.Count で取得できます。
Zuishin

2022/07/19 05:45

課題なら仕方ありませんが、普通は ListBox に表示したテキストデータから計算するのではなく、その元となるデータから計算します。
退会済みユーザー

退会済みユーザー

2022/07/19 06:15

> winFormsを使用しております。 質問欄を編集して追記してください。 .NET Framework なのか .NET Core/.NET のどっちなのかとそのバージョンを書きましょう。
wwwwx

2022/07/19 06:25

すみません。自分で調べながら¥以降の切り抜き方を調べたのですがよくわかりませんでした。もしよければ一部でもいいので教えていただけませんか? お願いします。
退会済みユーザー

退会済みユーザー

2022/07/19 06:36

質問の、 > listboxにて > 商品名x1 ¥100 > 商品名x1 ¥200 > ・ > ・ を表示するために自分でコードを書いたのでは? そのコードを質問欄に書けないのですか?
退会済みユーザー

退会済みユーザー

2022/07/19 06:37

> winFormsを使用しております。 質問欄を編集して追記してください。 .NET Framework なのか .NET Core/.NET のどっちなのかとそのバージョンを書きましょう。 ・・・これで 2 回目
KOZ6.0

2022/07/19 06:57

String クラスがどのようなメソッドを持っているか調べましょう 「String クラス」 https://docs.microsoft.com/ja-jp/dotnet/api/system.string?view=netframework-4.8 ・Split メソッドで "\" を区切り文字として配列に分割し、最後の要素を使う ・IndexOf もしくは LastIndexOf で "\" の位置を検索し、Substring メソッドで切り取る ( 商品名に "\" が含まれるようであれば、LastIndexOf を使ったほうが良い) といった方法が考えられます。 これって文字列操作の課題なんですかね? そうでないなら、ListBox に項目を追加している部分のコードを提示していただければ、より良い方法が提案できるかもしれません。
wwwwx

2022/07/19 07:15

提示させていただきました。プログラムの内容はこのような感じになっています
KOZ6.0

2022/07/19 07:33

提示されたコードでは金額は \100 固定のようですね。 \200 ってどこから持ってきたんでしょう?
Zuishin

2022/07/19 07:33

まさかの全部 100 円。
KOZ6.0

2022/07/19 07:34

件数数えて x 100 するだけですね
wwwwx

2022/07/19 07:38

すみません index=2 では200 index=3 では300 です
wwwwx

2022/07/19 07:45

いえ、こちらの方は存じ上げませんがこの方の回答をKOZ6.0さんがしており、それを参考にさせていただきました。
KOZ6.0

2022/07/19 08:11

まぁそういうことにしときましょう。 ListBox に表示されているのは商品単価であって、金額を求めるには商品数と掛けなければならないのでは? 設計もやりなおしたほうがよさそう
guest

回答1

0

ベストアンサー

現在のコードでは PictureBox の Tag に商品名しか入れていませんが、単価の情報も持たせたほうがよさそうです。
そのためのクラスを作ります。

VB

1Class StockInfo 2 Public ReadOnly Property Name As String 3 Public ReadOnly Property Price As Decimal 4 5 Public Sub New(name As String, price As Decimal) 6 Me.Name = name 7 Me.Price = price 8 End Sub 9End Class

Form1_Load で、PictureBox の Tag に代入します。

VB

1Me.PictureBox1.Tag = New StockInfo("商品名1", 100) 2Me.PictureBox2.Tag = New StockInfo("商品名2", 200) 3Me.PictureBox3.Tag = New StockInfo("商品名3", 300)

ListBox に登録するためのクラスも作っておきます。
ToString メソッドをオーバーライドすると、ListBox に表示されます。

VB

1Class Detail 2 Public ReadOnly Property Name As String 3 Public ReadOnly Property Price As Decimal 4 Public ReadOnly Property Count As Decimal 5 Public ReadOnly Property Amount As Decimal 6 7 Public Sub New(stock As StockInfo, count As Decimal) 8 Me.New(stock.Name, stock.Price, count) 9 End Sub 10 11 Public Sub New(name As String, price As Decimal, count As Decimal) 12 Me.Name = name 13 Me.Price = price 14 Me.Count = count 15 Me.Amount = price * count 16 End Sub 17 18 Public Overrides Function ToString() As String 19 Return String.Format("{0,-10} x {1,3} {2,6}", Name, Count, Price) 20 End Function 21 22End Class

Mypicturebox_Click は次のようになります。

VB

1Private Sub Mypicturebox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 2 Dim pbox As PictureBox = DirectCast(sender, PictureBox) 3 Dim stockInfo As StockInfo = DirectCast(pbox.Tag, StockInfo) 4 Using child As New Form2() 5 If child.ShowDialog() = DialogResult.OK Then 6 ListBox1.Items.Add(New Detail(stockInfo, child.StockCount)) 7 End If 8 End Using 9End Sub

合計金額は以下で求まります。

VB

1 Dim total As Decimal = 0 2 For Each d As Detail In ListBox1.Items 3 total += d.Amount 4 Next

投稿2022/07/19 09:10

編集2022/07/19 21:01
KOZ6.0

総合スコア2622

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

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

wwwwx

2022/07/20 01:55

本当にありがとうございます。すごく参考になりました。以後気を付けて質問させていただこうかと思いますm(__)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問