すべてはここ↓から始まりました。
データバインディングのおべんきょ。その1。
そうです。「TextBox の Text プロパティ にPerson クラス の Name プロパティをバインドしたろやないかいっ!」でしたね。もう遠い昔のようですね(だってもうその9だし)。
でも、これ、
なんで TextBox に入力したら Person クラス の Name プロパティが変更されたん?
不思議です。とっても不思議です。なのでちょっと調べてきました。すると、どうやら
「'プロパティ名' + Changed」 イベントの提供(コントロール側で。)
INotifyPropertyChanged インターフェイス の実装(コントロール側で。)
どちらかを行えばコントロールからデータへの変更も通知されるようです。TextBox のText プロパティは TextChanged イベントが対応しています。なので、Text プロパティにバインドされているデータのプロパティへの変更通知が行われるわけですね。
今回はその1で使用した Person クラスと Form1 をもう一度使用しますね。なお、今回コードの変更があるのは 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
TextBox1 に 'とりこびと' と入力して Button1 をクリックしたら、MessageBox に 'とりこびと' と表示されたんでしたよね。
これにちょっとした検証するために Form1 に以下のコードを追加します。
Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
MessageBox.Show(Me._person.Name)
End Sub
Form1 でTextBox1 の TextChanged イベントをハンドルして Text プロパティが変更されたときに _person.Name がどうなっているかを出力するコードです。
では、さっそく実行してみましょう♪TextBox1 に'abcde' と入力(直接入力で)して 出力結果をみてください。a、b、c・・・と入力した内容が、_person の Name プロパティに反映され(MessageBoxに表示され)ますか?
・・・。
・・・ ・・・。
・・・ ・・・ ・・・。
反映されていませんが、何か?
Text プロパティが変更されたのに Name プロパティに反映されません。・・・困りましたね。
・・・と、困ったところで次回に♪