Y121516 の大館お役立ち日記

秋田県大館市での生活

ListBoxとComboBoxの項目にあらゆる型のオブジェクトを入れられる

Items.Addメソッド

ListBox.Items.AddメソッドやComboBox.Items.Addメソッドで項目(item)を追加します。

この時、多くの人はString型のオブジェクト(文字列)をAddメソッドに渡していると思います。 しかし、このAddメソッドの引数の型をよく見てみましょう。

ListBox.ObjectCollection.Add(Object) Method (System.Windows.Forms) | Microsoft Docs ComboBox.ObjectCollection.Add(Object) Method (System.Windows.Forms) | Microsoft Docs

String型ではなくObject型です。

つまり、String型に限らずどのような型のオブジェクトを渡してもよいのです。 以下はそれを示すコードです。 AddToListBoxAndComboBoxメソッドで14種類の異なる型のオブジェクトをListBoxComboBoxの項目として追加しています。

Option Explicit On
Option Strict On
Option Infer On

Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        DisableFormatting()
        AddToListBoxAndComboBox()
    End Sub

    ' 項目の表示に ToString を使うようにする
    Private Sub DisableFormatting()
        ListBox1.FormattingEnabled = False
        ComboBox1.FormattingEnabled = False
    End Sub

    Private Sub AddToListBoxAndComboBox(Of T)(value As T)
        ListBox1.Items.Add(value)
        ComboBox1.Items.Add(value)
    End Sub

    Private Sub AddToListBoxAndComboBox()
        AddToListBoxAndComboBox(Short.MaxValue)    ' (Of Short)
        AddToListBoxAndComboBox(Integer.MaxValue)  ' (Of Integer)
        AddToListBoxAndComboBox(Long.MaxValue)     ' (Of Long)

        AddToListBoxAndComboBox(UShort.MaxValue)   ' (Of UShort)
        AddToListBoxAndComboBox(UInteger.MaxValue) ' (Of UInteger)
        AddToListBoxAndComboBox(ULong.MaxValue)    ' (Of ULong)

        AddToListBoxAndComboBox(Double.MaxValue)   ' (Of Double)
        AddToListBoxAndComboBox(Single.MaxValue)   ' (Of Single)
        AddToListBoxAndComboBox(Decimal.MaxValue)  ' (Of Decimal)

        AddToListBoxAndComboBox("A"c)              ' (Of Char)
        AddToListBoxAndComboBox("string")          ' (Of String)

        AddToListBoxAndComboBox(Today)             ' (Of Date)

        AddToListBoxAndComboBox(Me)                ' (Of Form1)
        AddToListBoxAndComboBox(New Object())      ' (Of Object)
    End Sub

    Public Overrides Function ToString() As String
        Return "このForm1型のオブジェクトだよ"
    End Function

End Class

f:id:y121516:20171125165241p:plain

Items.AddRangeメソッド

Items.AddRangeメソッドもItems.Addメソッドと同じことがいえます。あらゆる型の配列オブジェクトを引数として渡すことができます。

ListBox.ObjectCollection.AddRange Method (System.Windows.Forms) | Microsoft Docs ComboBox.ObjectCollection.AddRange(Object[]) Method (System.Windows.Forms) | Microsoft Docs

書式制御

なお、各オブジェクトがどのようなテキストとして表示されるか疑問に思った方もいると思います。 上の例では FormattingEnabled = False とすることで、項目として追加されたオブジェクトのToStringメソッドの結果がテキストになるようにしています。 ここでは詳細は説明しませんが関連するドキュメントへのリンクを紹介します。

ListControl.FormattingEnabled Property (System.Windows.Forms) | Microsoft Docs ListControl.DisplayMember Property (System.Windows.Forms) | Microsoft Docs