データバインディング その1
単純にSystem.Windows.Forms.Formを継承したFormに配置したTextBoxのTextプロパティに対して、
特定のクラスのプロパティをバインドする方法の1つを示します。
方法その1、.NET Framework 1.1の場合。
「プロパティ名 + Changed」 イベントの提供
これだけです。他のタイプのコントロールだったりすると、
他にも考慮すべきことはあるのですが、TextBoxのTextプロパティとのバインドであれば、これだけです。
[C#]
public class Form1 : System.Windows.Forms.Form
{
///いろいろ省略
private User m_SystemUser = new User() ;private User SystemUser
{
get{
return m_SystemUser;
}
set{
m_SystemUser = value;
}
}private void Form1_Load(object sender, System.EventArgs e)
{
this.TextBox1.DataBindings.Add("Text",this.SystemUser,"Name");
}private void Button1_Click(object sender, System.EventArgs e)
{
System.Windows.Forms.MessageBox.Show(this.SystemUser.Name);
}private void Button2_Click(object sender, System.EventArgs e)
{
this.SystemUser.Name = "太郎";
}}
}
[C#]
public class User
{
public User()
{
}public event EventHandler NameChanged;
private string m_Name = string.Empty;
public virtual string Name{
get{
return m_Name;
}
set{
if (m_Name.Equals(value)) {
return;
}
m_Name = value;
this.OnNameChanged(new EventArgs());
}
}protected virtual void OnNameChanged(EventArgs e)
{
NameChanged(this,e);
}
}
}
[VB.NET]
Public Class Form1
Inherits System.Windows.Forms.Form'''いろいろ省略
Private m_SystemUser As New User
Private Property SystemUser() As User
Get
Return m_SystemUser
End Get
Set(ByVal Value As User)
m_SystemUser = Value
End Set
End PropertyPrivate Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.TextBox1.DataBindings.Add("Text", Me.SystemUser, "Name")
End SubPrivate Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MsgBox(Me.SystemUser.Name)
End SubPrivate Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Me.SystemUser.Name = "太郎"
End Sub
End Class
[VB.NET]
Public Class UserPublic Event NameChanged As EventHandler
Private m_Name As String = String.Empty
Public Sub New()
End Sub
Public Property Name() As String
Get
Return m_Name
End Get
Set(ByVal Value As String)
If m_Name.Equals(Value) Then
Return
End If
m_Name = Value
Me.OnNameChanged(New EventArgs)
End Set
End PropertyProtected Overridable Sub OnNameChanged(ByVal e As EventArgs)
RaiseEvent NameChanged(Me, e)
End Sub
End Class