• ベストアンサー

VB.NETのListBoxで指定した項目のValueを取得する方法

ListBoxで現在選択している項目のValueを取得する方法はわかるのですが、X個目のValueの値を参照、設定する方法がわかりません。教えてくださいー

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

>選択した店舗の店舗番号を取得したいんです。 MSDN のListBox のサンプルをComboBox にして今回の質問に合わせて修正したものを以下に挙げておきます。 コマンドプロンプトで vbc sample.vb sample でそのまま実行して試してみることができます。 要点は、DataSource でArrayListをつないでおくということです。 DataSource を使うとSelectedValue で取り出せるので便利ですね。 でもまあ、 こんなふうにしなくても、別にArrayListで保持しているのがわかっていれば、index で対応付けをして取り出したり設定したりできます。 '--------------------------------------------------------------- Imports System.Windows.Forms Imports System.Drawing Imports System.Collections Public Class Store Private aStoreName As String Private aStoreNo As Integer Public Sub New(ByVal name As String, ByVal no As Integer) MyBase.New() Me.aStoreName = name Me.aStoreNo = no End Sub Public ReadOnly Property StoreName() As String Get Return aStoreName End Get End Property Public ReadOnly Property StoreNo() As Integer Get Return aStoreNo End Get End Property Public Overrides Function ToString() As String Return Me.aStoreName & " - " & Me.aStoreNo End Function End Class Public Class ComboBoxSample Inherits Form Friend WithEvents cmbStoreList As ComboBox = New ComboBox() Dim textBox1 As TextBox = New TextBox() <System.STAThreadAttribute()> _ Public Shared Sub Main() System.Windows.Forms.Application.Run(New ComboBoxSample()) End Sub Public Sub New() Me.AutoScaleBaseSize = New Size(5, 13) Me.ClientSize = New Size(292, 181) Me.Text = "ComboBox Sample" cmbStoreList.Location = New Point(24, 16) cmbStoreList.Name = "cmbStoreList" cmbStoreList.Size = New Size(232, 130) textBox1.Location = New Point(24, 160) textBox1.Name = "textBox1" textBox1.Size = New Size(40, 24) Me.Controls.AddRange(New Control() {cmbStoreList, textBox1}) Dim Stores As New ArrayList() Stores.Add(New Store("A店", 15)) Stores.Add(New Store("B店", 20)) Stores.Add(New Store("C店", 45)) Stores.Add(New Store("BLUE店", 99)) cmbStoreList.DataSource = Stores cmbStoreList.DisplayMember = "StoreName" cmbStoreList.ValueMember = "StoreNo" End Sub Private Sub InitializeComponent() End Sub Private Sub cmbStoreList_SelectedValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbStoreList.SelectedValueChanged If cmbStoreList.SelectedIndex <> -1 Then textBox1.Text = cmbStoreList.SelectedValue.ToString() End If End Sub End Class

Haule
質問者

お礼

なるほど、自分で保持するようにしないとだめなのですねー 何度もありがとうございました! これを参考に作ってみます!

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

>Valueではなくて、リスト名が変わってしまいました もしかして、DataSource で設定してます? ヘルプには、 DataSource プロパティを設定した場合、ユーザーは項目のコレクションを変更できません。 とありますので、 その場合、DataSource の元の方を変更しないとだめじゃないかな またまた、勘違いしてたらごめんなさい。 どんな感じでやっているか補足してくれた方が、いいような気がします。

Haule
質問者

補足

ごめんなさい!一つ大きな勘違いをしていました! リストボックスではなくてコンボボックスでした。 やりたいことを細かく説明すると、選択した店舗の店舗番号を取得したいんです。 コンボボックス(cmbStoreList) 表示:A店 Value:15(店舗番号15) 表示:B店 Value:20(店舗番号20) 初期設定関数 cmbStoreList.Items.Add("A店") cmbStoreList.Items.Item(0) = 15 cmbStoreList.Items.Add("B店") cmbStoreList.Items.Item(1) = 20 こうすると、コンボボックスの表示が「15」になってしまいます。 その後 処理関数 店舗番号格納変数=cmbStoreList.Items.Item(0) 処理 こんな感じですよろしくおねがいします!

すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

リストボックス.Items.Item(X) でいいんじゃないかな

Haule
質問者

補足

試してみましたが、Valueではなくて、リスト名が変わってしまいました><

すると、全ての回答が全文表示されます。

関連するQ&A