忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

コンボボックスのItemsプロパティにクラスデータを設定する方法(コードと文字列をセットで設定)

コンボボックスの基本的な使い方」の中で コンボボックスの項目のコレクションとしての Itemsプロパティに文字列を設定していますが、 この文字列の代わりにクラスのデータを設定する方法を示します。

クラス名を ComboItemとし表示文字列とコードを内部に持ったクラスを宣言します。
以下にソースを示します。ここで重要なのは、ToString()メソッドを宣言することで、 コンボボックスの選択時に文字列として表示されるのが、このメソッドの戻り値が使用されるためです。

    ''' 
    ''' コンボボックスのItemsに設定される、表示文字列とコードを持ったクラス
    ''' 
    Public Class ComboItem
        'コードデータ退避
        Private mintCode As Integer
        '表示文字列データ退避
        Private mstrText As String

        ''' 
        ''' 文字列プロパティ
        ''' 
        Public ReadOnly Property Text As String
            Get
                Return Me.mstrText
            End Get
        End Property

        ''' 
        ''' コードプロパティ
        ''' 
        Public ReadOnly Property Code As Integer
            Get
                Return Me.mintCode
            End Get
        End Property

        ''' 
        ''' クラスデータの表示文字列を返す
        ''' 
        ''' 表示文字列
        ''' ComboBoxの表示部分には、ToString()メソッドの内容が表示される
        Public Overrides Function ToString() As String
            Return mstrText
        End Function

        ''' 
        ''' コンストラクタ
        ''' 
        '''コード
        '''表示文字列
        Public Sub New(ByVal intCode As Integer, ByVal strText As String)
            mintCode = intCode
            mstrText = strText
        End Sub

    End Class

さてこのクラスを使用したコンボボックスへの設定ですが、以下のソースを見て下さい。
その後、フォームロードイベントでコンボボックスの Itemsプロパティ(ObjectCollection) に、4個クラスデータを生成し追加で初期化を行います。
ボタン1クリックイベントでは、 選択されているIndexの取得を行い、値が -1 で無ければ、 コンボボックスの選択値を取得し、クラスデータとしてキャストしたものから、コード及び文字列を取得し表示します。
ボタン2クリックイベントでは、コンボボックスの選択を解除します。

コンボボックスのItemsプロパティにクラスデータを設定する方法

Public Class frmComboBoxItemsClass

    ' =====
    ' 実際はここに上のクラス宣言がある
    ' =====
    
    ''' 
    ''' フォームロードイベント
    ''' 
    Private Sub frmComboBox_Load(sender As Object, e As EventArgs) Handles Me.Load
        'コンボボックス初期化
        With Me.ComboBox1
            .DropDownStyle = ComboBoxStyle.DropDownList
            'クラスを使用してコンボボックスへの設定
            Dim cboItem As ComboItem
            cboItem = New ComboItem(10, "あいうえお")
            .Items.Add(cboItem)
            cboItem = New ComboItem(20, "かきくけこ")
            .Items.Add(cboItem)
            cboItem = New ComboItem(30, "さしすせそ")
            .Items.Add(cboItem)
            cboItem = New ComboItem(40, "たちつてと")
            .Items.Add(cboItem)
        End With
    End Sub

    ''' 
    ''' ボタンクリックイベント・選択状態の表示
    ''' 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        '選択されているIndexの取得
        Dim intIdx As Integer = Me.ComboBox1.SelectedIndex
        If intIdx <> -1 Then
            '選択されている項目の取得(クラスデータへのキャスト)
            Dim cboItem As ComboItem = CType(Me.ComboBox1.SelectedItem, ComboItem)
            '結果表示
            Dim strDsp As String = "コード : " & cboItem.Code & vbCrLf & "文字列 : " & cboItem.Text
            MsgBox(strDsp, MsgBoxStyle.OkOnly, Me.Text)
        Else
            MsgBox("未選択!!", MsgBoxStyle.OkOnly, Me.Text)
        End If
    End Sub

    ''' 
    ''' ボタンクリックイベント・選択状態の解除
    ''' 
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        '選択されている状態を解除
        Me.ComboBox1.SelectedIndex = -1
    End Sub
End Class


結果これを実行しますと、以下の様になります。


ボタン1のクリック時は以下の様になります。

ボタン2のクリック時はコンボボックスの選択が解除され何も表示されないはずです。

尚、フォームロードイベントでのコンボボックスへの初期化ですが、 クラスデータの配列を宣言し、AddRangeを使って以下の様に書き換えることもできます。

    ''' 
    ''' フォームロードイベント
    ''' 
    Private Sub frmComboBox_Load(sender As Object, e As EventArgs) Handles Me.Load
        'コンボボックス初期化
        With Me.ComboBox1
            .DropDownStyle = ComboBoxStyle.DropDownList
            Dim cboItems() As ComboItem = {
                New ComboItem(10, "あいうえお"), New ComboItem(20, "かきくけこ"),
                New ComboItem(30, "さしすせそ"), New ComboItem(40, "たちつてと")
            }
            .Items.AddRange(cboItems)
        End With
    End Sub

関連する記事

コンボボックスの基本的な使い方(項目に文字列のみを設定)
ComboBoxの簡単な拡張クラス(枠線色の描画):[WndProc,CreateGraphics,DrawRectangle]

おすすめ本












PR

コメント

コメントを書く