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種類の異なる型のオブジェクトをListBox
とComboBox
の項目として追加しています。
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
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