リストボックスにデータを表示する時にListクラスを利用することが多いと思いますが、BindingListクラスのほうが便利です。
このBindingListクラスはプログラムから動的に項目を追加するとリストボックスにすぐに反映されます。
Listクラスを使っていても大丈夫です。
BindingListクラスのコンストラクタの引数にListクラスを渡すと変換されます。
VB.NETで利用する時はImports System.ComponentModelを忘れずに。
C#
public partial class Form1 : Form { //よく使われるListのジェネリック版 List<string> list1 = new List<string>(); //今回紹介したいBindingListクラス BindingList<string> list2 = new BindingList<string>(); public Form1() { InitializeComponent(); } //初期状態の設定 private void Form1_Load(object sender, EventArgs e) { //Listクラスの初期値設定 this.list1.Add("Tokyo"); this.list1.Add("Osaka"); this.list1.Add("Fukuoka"); //BindingListクラスの初期値設定 this.list2.Add("Tokyo"); this.list2.Add("Osaka"); this.list2.Add("Fukuoka"); //listBox1はListクラス this.listBox1.DataSource = list1; //listBox2はBindingListクラス this.listBox2.DataSource = list2; } private void button1_Click(object sender, EventArgs e) { //こちらのボタンはListクラスにデータを追加するが //listBox1には追加分が表示されない。 this.list1.Add("Nagoya"); this.list1.Add("Sapporo"); } private void button2_Click(object sender, EventArgs e) { //こちらのボタンはBindingListクラスにデータを追加すると //listBox2に追加分が表示される。 this.list2.Add("Nagoya"); this.list2.Add("Sapporo"); } private void button3_Click(object sender, EventArgs e) { //ListクラスからBindingListクラスを作る。 BindingList<string> bl = new BindingList<string>(this.list1); this.listBox1.DataSource = bl; } }
VB.NET
Imports System.ComponentModel Public Class Form1 'よく使われるListのジェネリック版 Private list1 As List(Of String) = New List(Of String) '今回紹介したいBindingListクラス Private list2 As BindingList(Of String) = New BindingList(Of String) '初期状態の設定 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 'Listクラスの初期値設定 Me.list1.Add("Tokyo") Me.list1.Add("Osaka") Me.list1.Add("Fukuoka") 'BindingListクラスの初期値設定 Me.list2.Add("Tokyo") Me.list2.Add("Osaka") Me.list2.Add("Fukuoka") 'listBox1はListクラス Me.ListBox1.DataSource = list1 'listBox2はBindingListクラス Me.ListBox2.DataSource = list2 End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 'こちらのボタンはListクラスにデータを追加するが 'listBox1には追加分が表示されない。 Me.list1.Add("Nagoya") Me.list1.Add("Sapporo") End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 'こちらのボタンはBindingListクラスにデータを追加すると 'listBox2に追加分が表示される。 Me.list2.Add("Nagoya") Me.list2.Add("Sapporo") End Sub Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click 'ListクラスからBindingListクラスを作る。 Dim bl As BindingList(Of String) = New BindingList(Of String)(Me.list1) Me.listBox1.DataSource = bl End Sub End Class