リストボックスにデータを表示する時に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
