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

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