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
     12
3456789
10111213141516
17181920212223
2425262728  
<< February 2019 >>

search this site.

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

categories

アマゾン

楽天

selected entries

archives

recent comment

  • iPhoneの着信音を新しいiPhoneに移動する
    iPhone 着信音 作成 (12/24)
  • MacでBlu-ray編 〜 BD-Rを焼く その4 無料のライティングソフトを使ってみる編
    rockecco (12/03)
  • あの、クラスとかメソッドとかプルダウンできるバーって〜Visual Studio 2015
    rockecco (12/03)
  • MacでBlu-ray編 〜 BD-Rを焼く その2
    rockecco (12/03)
  • あの、クラスとかメソッドとかプルダウンできるバーって〜Visual Studio 2015
    やま (11/29)
  • MacでBlu-ray編 〜 BD-Rを焼く その4 無料のライティングソフトを使ってみる編
    ブルーレイ 書き込み (11/20)
  • MacでBlu-ray編 〜 BD-Rを焼く その2
    ブルーレイ 焼く (11/13)
  • プリンセスパフュームのキーがいくつ出るか考えてみる
    Y. U. (11/09)
  • プリンセスパフュームのキーがいくつ出るか考えてみる
    rockecco (11/08)
  • プリンセスパフュームのキーがいくつ出るか考えてみる
    Y. U. (11/08)

recent trackback

profile


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

others

mobile

qrcode

powered

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