コンボボックスの表示値からオブジェクトを取得
2列の値を持つコンボボックス[コード+値]で関連する値を取得したのですが、Stringもオブジェクトであるように自分で作成したオブジェクトも取得できそうです。
例が悪いのですが、都市を表示し緯度経度を取得してみます。
Public Class Place
Structure Coordinate
Public latitude As String
Public longitude As String
End Structure
Protected m_strCity As String
Protected m_Coordinate As Coordinate
Public Sub New()
End Sub
Public Property City() As String
Get
Return m_strCity
End Get
Set(ByVal value As String)
m_strCity = value
End Set
End Property
Public Property CityCoordinate() As Coordinate
Get
Return m_Coordinate
End Get
Set(ByVal value As Coordinate)
m_Coordinate = value
End Set
End Property
Public Overrides Function ToString() As String
Return Me.City + " : " + Me.CityCoordinate.latitude + " - " + Me.CityCoordinate.longitude
End Function
End Class
上記クラスは、コンボボックスの「DataSource」プロパティにセットするクラスです。この例では、座標を保存する構造体を作成し緯度、経度を保存します。このクラスで都市名と座標の関係を保存します。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim PlaceData(2) As Place
Dim CoordinateInfo As Place.Coordinate
Dim PlaceList As New ArrayList()
PlaceData(0) = New Place
PlaceData(0).City = "札幌市"
CoordinateInfo.latitude = "43°04'N"
CoordinateInfo.longitude = "141°21'E"
PlaceData(0).CityCoordinate = CoordinateInfo
PlaceData(1) = New Place
PlaceData(1).City = "鹿児島市"
CoordinateInfo.latitude = "31°36'N"
CoordinateInfo.longitude = "130°33'E"
PlaceData(1).CityCoordinate = CoordinateInfo
PlaceList.Add(PlaceData(0))
PlaceList.Add(PlaceData(1))
AddHandler ComboBox1.SelectedValueChanged, AddressOf ComboBox1_SelectedValueChanged
ComboBox1.DataSource = PlaceList
ComboBox1.DisplayMember = "City"
ComboBox1.ValueMember = "CityCoordinate"
' ComboBox1.Text = ""
End Sub
Private Sub ComboBox1_SelectedValueChanged(ByVal sender As Object, ByVal e As EventArgs)
If ComboBox1.SelectedIndex <> -1 Then
TextBox1.Text = DirectCast(ComboBox1.SelectedValue, Place.Coordinate).latitude
End If
End Sub
ComboBox1.SelectedValueでオブジェクトが取得できるため、「CityCoordinate」プロパティで取得できる「Coordinate」構造体から緯度を表示しています。