|
■No47629 (VB初心者 さん) に返信 > Txt_Hoge.DataBindings.Add("Text",Dt,"Col1") > とした場合、DataBindingsで参照しているのはDtではないのでしょうか?
Dt といえば Dt ですが、この場合には 『自フォーム上の Dt という変数名』 を追跡しているわけではなく、 『Add 時に変数 Dt で示されたインスタンス』 を参照しています。
Add メソッド側にとってみれば、第二引数では単に Dt のインスタンスを受け取っている だけであり、指定された変数名が「Dt」かどうかまでは追跡しようが無いということです。
別の例で見てみます。下記は DataTable ではなく、他のコントロールをバインドさせる例です。
Private txt As TextBox Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load TextBox1.Text = "TextBox1" TextBox2.Text = "TextBox2"
Label1.DataBindings.Add("Text", TextBox1, "Text") Label2.DataBindings.Add("Text", TextBox2, "Text")
txt = TextBox1 Label3.DataBindings.Add("Text", txt, "Text") End Sub
この場合、 ・Label1.Text は、TextBox1.Text に追従して変化する。 ・Label2.Text は、TextBox2.Text に追従して変化する。 ・Label3.Text は、txt.Text (この場合は TextBox1) に追従して変化する。 という動作となります。
しかし、後から Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click txt = TextBox2 End Sub で txt の参照先を変更してみても、Lable3 のバインド先が TextBox1 から TextBox2 に変わるわけではありません。 あくまでも、.DataBindings.Add で指定したインスタンスが対象ということです。
もし、バインド先のインスタンスを変更する必要があるのなら、 Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load BindingSource1.DataSource = TextBox1 Label4.DataBindings.Add("Text", BindingSource1, "Text") End Sub
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click BindingSource1.DataSource = TextBox2 End Sub のように、BindingSource などを中継させると良いでしょう。
|