えと、データバインディングについて個人的にちょっとまとめておく必要がありそうだったので、せっかくだしエントリにしてしまおうという試みです。
今回は、単純にForm に配置した TextBox Text プロパティにとあるクラスのプロパティをバインドする方法です。
まず、最初に Visual Studio 2005 を使用して Visual Basic で WindowsApplication プロジェクトを作成します。プロジェクト名は「WindowsApplication1」でいいです。するとご存知のとおり、Form1 クラスの作成までやってくれますね。その勝手に出来上がった Form1 に TextBox と Button を一つずつ配置しておきます。(TextBox1 と Button1 でいいですよん。)
次に、以下のようなクラスを用意します。Person.vb というファイルを作成して、
Public Class Person
Private _name As String = String.Empty
Public Property Name() As String
Get
Return _name
End Get
Set(ByVal value As String)
_name = value
End Set
End Property
Public Sub New()
End Sub
End Class
Name というプロパティを持った Person クラスを作成します。そうです、この Person クラスのインスタンスの Name プロパティを Form1 の TextBox1 のText プロパティにバインドさせようという目論見です♪(あ、Button1 は Name プロパティの内容をMessageBox で表示させるためだけに使用します。)
Form1 クラスには、以下の内容を記述します。
Imports System
Imports System.Windows.Forms
Public Class Form1
Private _person As Person
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
Me._person = New Person
Me.TextBox1.DataBindings.Add(New Binding("Text", Me._person, "Name"))
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles Button1.Click
MessageBox.Show(Me._person.Name)
End Sub
End Class
ポイントになる部分は Form1_Load メソッド だけです。抜き出しますと、
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
Me._person = New Person
Me.TextBox1.DataBindings.Add(New Binding("Text", Me._person, "Name"))
End Sub
ですね。(a) の行で Form1 の Private メンバ _person を初期化し、(b) の行で Text プロパティに _person の Name プロパティをバインドした Binding クラス を TextBox1 に追加しています。これによって、TextBox1 の Text プロパティ に _person の Name プロパティがバインドされるわけですね。
では、さっそく実行してみましょう♪Form1 が表示されたら、TextBox1 にテケトーに入力して Button1 をクリックしてみてください。ちゃんと入力した内容が表示されますね。つまり、入力した内容が、_person の Name プロパティに反映されているわけですね。
ちょっとこれ、ちょ→すごくない?
いや~、すばらしい!さ、これでデータバインディングのおべんきょはおしまい、めでたしめでたし♪
って、こんな終わり方するわけないですよね。 だって'その1'ですし。
ちょっとこんなの試してみてください。デザイナから Form1 にButton をもう一つ追加して(Button2 で。)Form1 のコードに以下のように書き加えます。
Imports System
Imports System.Windows.Forms
Public Class Form1
Private _person As Person
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
Me._person = New Person
Me.TextBox1.DataBindings.Add(New Binding("Text", Me._person, "Name"))
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles Button1.Click
MessageBox.Show(Me._person.Name)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Me._person.Name = "とりこびと"
End Sub
End Class
Button2 をクリックすると入力からではなくプログラムコードから _person の Name プロパティ を設定するコードです。
ではでは、実行してみましょう。Button2 をクリックしてから Button1 をクリックしてみてください。Messagebox には 'とりこびと' って表示されますよね。って、
あ、あ、あれ? TextBox の方は 'とりこびと' じゃないぢゃん!(ToT)
そうです。プログラムコードから変更した内容が反映されません。・・・困りましたね。
・・・と、困ったところで次回につ・づ・く♪