掲示板お問い合わせランダムジャンプ

Top Index

2008年05月18日
TextBoxのDataBindingsの使い方
オブジェクトをテキストボックスなどのユーザーインターフェイスを利用して編集操作をさせる場合、DataBindingsを使うと簡単にオブジェクト<->コントロールのマッピングが行え便利です。

しかし、オブジェクトの編集をすべてUIを通してやる分にはOKなのですが、プログラム上で自動で値を更新する場合などは、ReadValue、WriteValueメソッドを使う必要があるので注意します。

以下、ArticleクラスにNameというString型のプロパティがある場合でのサンプル。
01Public Class EditForm1
02
03    Private _Article As Article
04    Public Property Article() As Article
05        Get
06            Return _Article
07        End Get
08        Set(ByVal value As Article)
09            _Article = value
10        End Set
11    End Property
12
13    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
14        Me.Article = New Article With {.Name = "TEST"}
15        Me.TextBox1.DataBindings.Add("Text", Me.Article, "Name", True, DataSourceUpdateMode.OnValidation, "")
16    End Sub
17
18    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
19        'ソース元を更新しても、反映はされない
20        Me.Article.Name = "ABC"
21        MessageBox.Show(Me.Article.Name = Me.TextBox1.Text) 'False
22
23        '反映するには ReadValue メソッドを手動でコールすること
24        Me.TextBox1.DataBindings("Text").ReadValue()
25        MessageBox.Show(Me.Article.Name = Me.TextBox1.Text) 'True
26    End Sub
27
28
29    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
30        'コントロールを直接編集しても、反映されない
31        Me.TextBox1.Text = "123"
32        MessageBox.Show(Me.Article.Name = Me.TextBox1.Text) 'False
33
34        '反映するには WriteValue メソッドを手動でコールすること
35        Me.TextBox1.DataBindings("Text").WriteValue()
36        MessageBox.Show(Me.Article.Name = Me.TextBox1.Text) 'True
37    End Sub
38End Class
 powered by vb2html ver2.1b


なお、Binding時の updateMode を DataSourceUpdateMode.OnPropertyChanged とした場合、TextBoxのプロパティ変更が変更されただけでコントロール->オブジェクトへの同期が走ります。

01Public Class EditForm1
02
03    Private _Article As Article
04    Public Property Article() As Article
05        Get
06            Return _Article
07        End Get
08        Set(ByVal value As Article)
09            _Article = value
10        End Set
11    End Property
12
13    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
14        Me.Article = New Article With {.Name = "TEST"}
15        Me.TextBox1.DataBindings.Add("Text", Me.Article, "Name", True, DataSourceUpdateMode.OnPropertyChanged, "")
16    End Sub
17
18    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
19        'ソース元を更新しても、反映はされない
20        Me.Article.Name = "ABC"
21        MessageBox.Show(Me.Article.Name = Me.TextBox1.Text) 'False
22
23        '反映するには ReadValue メソッドを手動でコールすること
24        Me.TextBox1.DataBindings("Text").ReadValue()
25        MessageBox.Show(Me.Article.Name = Me.TextBox1.Text) 'True
26    End Sub
27
28    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
29        '更新方法が「OnPropertyChanged」なら、WriteValueを書かなくても同期がとれます。
30        Me.TextBox1.Text = "123"
31        MessageBox.Show(Me.Article.Name = Me.TextBox1.Text) 'True
32    End Sub
33End Class
 powered by vb2html ver2.1b

[ 投稿者:mk3008 at 15:26 | VB.NETコーディングTips | コメント(1) | トラックバック(0) ]

この記事へのコメント
無題
thanks very much.
投稿者: human at 2009-12-15 13:19:02

この記事へのトラックバック

この記事へのトラックバックURL
http://shinshu.fm/MHz/88.44/a03195/0000239448.trackback

この記事の固定URL
http://shinshu.fm/MHz/88.44/archives/0000239448.html

記事へのコメント
 
認証コード:
画像に表示されるコードを半角英数字で入力して下さい。画像が読み難い場合はこちら
簡単演算認証: 7 x 8 =
計算の答えを半角英数字で入力して下さい。
名前: [必須]
URL/Email:
タイトル:
コメント:
※記事・コメントなどの削除要請はこちら