コンボボックスの表示値からオブジェクトを取得

メモ:  Category:vb

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」構造体から緯度を表示しています。

bluenote by BBB