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
1234567
891011121314
15161718192021
22232425262728
293031    
<< July 2018 >>

search this site.

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

categories

アマゾン

楽天

selected entries

archives

recent comment

  • ミラクルちゅーんず46話の畑(ぺっこりファーム)探し
    rockecco (07/13)
  • ミラクルちゅーんず46話の畑(ぺっこりファーム)探し
    ジャパネット三鷹 (07/13)
  • WHEA-Logger イベント17 エラーが全く解消されない
    zzz (07/01)
  • SharePointの容量がパンパン!?〜OneNoteの容量確認と履歴の完全削除
    rockecco (06/12)
  • SharePointの容量がパンパン!?〜OneNoteの容量確認と履歴の完全削除
    haru (05/24)
  • Thumbs.dbでフォルダが削除、名前の変更ができない件
    rockecco (05/18)
  • Thumbs.dbでフォルダが削除、名前の変更ができない件
    rockecco (05/18)
  • Thumbs.dbでフォルダが削除、名前の変更ができない件
    BWM (05/16)
  • Thumbs.dbでフォルダが削除、名前の変更ができない件
    通りすがり (05/09)
  • Windows Updateのサービスが起動していない
    rockecco (04/25)

recent trackback

profile


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

others

mobile

qrcode

powered

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