ListBoxやComboboxのDisplayMemberを考える〜VS2008

  • 2012.02.27 Monday
  • 12:24
自作のクラスや構造体を作って、それをListBoxやComboboxへ登録したとする。

例えばこんな構造体を作ったとして
 
Private Structure UserList
    Public Value As String
    Public Index As Int32
    Public Label As String
End Structure


何も考えずにItemsへ入れると・・・
 
Dim uList() As Object = New Object() {New UserList With {.Label = "テスト1", .Value = "Test1".Index = 1I}, _
                                      New UserList With {.Label = "テスト2", .Value = "Test2".Index = 2I}, _
                                      New UserList With {.Label = "テスト3", .Value = "Test3".Index = 3I}, _
                                      New UserList With {.Label = "テスト4", .Value = "Test4".Index = 4I}}
‌ 
Call Me.ComboBox1.Items.AddRange(uList)'Itemsへ追加


たぶんこうなる

ListboxやComboboxのDisplayMember
WindowsApplication1.Form1+UserList・・・


これを解消するには、
 
Me.ComboBox1.DisplayMember = "Label"

とすれば良いのだが、おそらく、上の構造体のままではおそらく表示が変わらない(上の画像のまま)である。
構造体を見直す必要がある。どこを直すかというと、

Public Label As String を
 
Private _Label As String
‌ 
Public Property Label() As String
    Get
        Return _Label
    End Get
    Set(ByVal value As String)
        _Label = value
    End Set
End Property

といった感じで、プロパティに変更すると・・・

ListboxやComboboxのDisplayMember

ようやくリストにLabelプロパティ部分が表示される。



ちなみに、Labelプロパティをわざわざ作らなくても、
ToStringをOverridesすれば、手っ取り早い
 
Public Overrides Function ToString() As String
     Return Label
End Function

DisplayMemberになにも定義しなくても、リストへ反映してくれる。


まとめると、
 
Private Structure UserList
    Public Value As String
    Public Index As Int32
    Public Label As String
    Public Overrides Function ToString() As String
        Return Label
    End Function
End Structure
‌ 
Dim uList() As Object = New Object() {New UserList With {.Label = "テスト1", .Value = "Test1".Index = 1I}, _
                                      New UserList With {.Label = "テスト2", .Value = "Test2".Index = 2I}, _
                                      New UserList With {.Label = "テスト3", .Value = "Test3".Index = 3I}, _
                                      New UserList With {.Label = "テスト4", .Value = "Test4".Index = 4I}}
Call Me.ComboBox1.Items.AddRange(uList)

で、

ListboxやComboboxのDisplayMember

こうなる

覚え書きまで
コメント
コメントする








    
この記事のトラックバックURL
トラックバック

calendar

S M T W T F S
   1234
567891011
12131415161718
19202122232425
2627282930  
<< November 2017 >>

search this site.

よく使う、検索される投稿

categories

アマゾン

楽天

selected entries

archives

recent comment

recent trackback

profile


※当ブログはリンクフリーですが、 取材や雑誌等で掲載される場合は、事前にお知らせください

others

mobile

qrcode

powered

無料ブログ作成サービス JUGEM