とりこらぼ。

Learn from yesterday,
live for today,
hope for tomorrow.

目次

Blog 利用状況

ニュース

プロフィール

  • 名前:とりこびと
    とるに足らない人間です。

  • Wankuma MVP
    for '平々凡々'

Web Site

  • Memo(Of T)

もうひとつの Blog

広告っぽい

書庫

日記カテゴリ

データバインディングのおべんきょ。その2。

データバインディングのおべんきょ。その1。

これまでのあらすじ。

あ、あ、あれ? TextBox の方は 'とりこびと' じゃないぢゃん!(ToT)

なんとも切ないお話です。涙が止まりません。バインドしたデータそのものにプログラムコードから変更しても TextBox1 に反映されませんでした。

なんとかこの問題をズバッと解決したいところです。がんばりましょう。いろいろ調べた結果、.NET Framework 2.0 では、基本的な方法として2通りあるようです。.NET Framework 1.1(.NET Framework 1.0 は未確認)でもそのうちの1つが使えそうです。

ではまず、.NET Framework 1.1 でも使えちゃう方法から。さくっと書きます。

「'プロパティ名' + Changed」 イベントの提供

だそうです。えぇ、名前が決まってます。「プロパティの名前にChangedをつけたイベント」です。今回だとNameChanged イベントですね。イベントについては以下のリンクをどうぞ♪

MSDN:イベントとイベント ハンドラ(http://msdn2.microsoft.com/ja-jp/library/2z7x8ys3(VS.80).aspx)

MSDN:方法 : イベントをクラスに追加する(http://msdn2.microsoft.com/ja-jp/library/cwa28bw2(VS.80).aspx)

ま、とりあえずやってみましょう。前回使用した Person クラスの Name プロパティが変更されたということを通知するイベントの実装です。

Imports System

Public Class Person

    Public Event NameChanged As EventHandler

    Private _name As String = String.Empty
    Public Property Name() As String         Get             Return _name         End Get         Set(ByVal value As String)             If _name = value Then                 Exit Property             End If             _name = value             Me.OnNameChanged(New EventArgs)         End Set     End Property

    Public Sub New()
    End Sub

    Protected Overridable Sub OnNameChanged(ByVal e As EventArgs)
        RaiseEvent NameChanged(Me, e)
    End Sub

End Class

なんだかコードがさくっと増えましたが、以下の部分が変更になっています。

Public Event NameChanged As EventHandler

この一行がイベントの宣言になります。

Set(ByVal value As String)
    If _name = value Then
        Exit Property
    End If
    _name = value
    Me.OnNameChanged(New EventArgs)
End Set

Name プロパティのSet の部分です。現在の値と設定される値を比較し、同じであれば設定しないように変更しました。また、違う値を設定すると、OnNameChanged メソッドを呼び出します。

Protected Overridable Sub OnNameChanged(ByVal e As EventArgs)

    RaiseEvent NameChanged(Me, e)
End Sub

OnNameChanged は 内部で NameChanged イベントを発生させます。RaiseEvent ステートメントです。



今回の作業はこれでおしまいです。早速実行してみてください。前回、Button2 をクリックすると内部で _person の Name プロパティを変更するようなコードになっていました。その Button2 をクリックして TextBox1 のText プロパティに 変更が反映されるか確認してみましょう。


みて!反映されてる!反映されてるよ!かぁちゃん!!


というわけで、「'プロパティ名' + Changed」 イベントの提供という方法でデータの変更をコントロールに通知する方法でした。


次回はもう一つの方法ですよね♪

投稿日時 : 2007年5月29日 14:19

Feedback

# データバインディングのおべんきょ。その3。 2007/05/29 14:54 とりこびと ぶろぐ。

データバインディングのおべんきょ。その3。

# re: データバインディングのおべんきょ。その2。 2007/05/29 18:30 とりこびと

やっと見つけたので。
MSDN:方法 : PropertyNameChanged パターンを適用する
http://msdn2.microsoft.com/ja-jp/library/ms229615(VS.80).aspx

# .NET言語相互変換計画 2009/05/07 16:02 東方算程譚

.NET言語相互変換計画

# tlcxVjDtdQoGTncrwSO 2011/09/29 22:51 http://oemfinder.com

ns0xvG Fresh thoughts, fresh view on the subject..!

# CaHOBhniKSARsLaSDsq 2011/11/02 5:30 http://www.pharmaciecambier.com/

Can be also this issue because the truth can be achieved only in a dispute :D

# RqFqQApoACnSqMRwqD 2011/11/08 16:38 http://www.noteletrackpaydayloansnofax.com/

Yeah� I read and I understand that I do not understand anything what it is about:D

# HDSDBvNFkFJbXKP 2011/11/16 4:45 http://www.hooksandlattice.com/sidewalk-signs.html

Author, Shoot yourself a knee..!

タイトル  
名前  
Url
コメント