DOBON.NETプログラミング道掲示板

■34019 / 2階層)  フォームコントロールへのDataBindingsでプロパティが相互反映されない
□投稿者/ 魔界の仮面弁士 大御所(1160回)-(2018/11/05(Mon) 17:10:50)
  • アイコンNo34017に追記(魔界の仮面弁士の記事)
    > .DataBindings.Add() したインスタンス (As Binding)を保持しておき、
    > ValueChanged 後に Binding クラスの ReadValue メソッドを呼び直せば、
    > Me.customer_code.Text に桁補完結果が反映されるようです。

    別案。
    BindingComplete イベントを使ってみました。



    Private Sub DataBindingsToControls(con As Control, src As Object, srcProperty As String)
      Dim prop As String = ""
      Select Case True
        Case TypeOf con Is TextBoxBase

          ' 双方向にするため、BindingComplete イベント内で ReadValue メソッドを呼び出す
          AddHandler con.DataBindings.Add("Text", src, srcProperty, True, DataSourceUpdateMode.OnValidation).BindingComplete, _
            Sub(sender As Object, e As BindingCompleteEventArgs)
              e.Binding.ReadValue()
            End Sub

        Case TypeOf con Is Label
          con.DataBindings.Add("Text", src, srcProperty, True, DataSourceUpdateMode.OnValidation)
        Case TypeOf con Is ComboBox
          DataBindings.Add("SelectedValue", src, srcProperty, True, DataSourceUpdateMode.OnPropertyChanged)
        Case TypeOf con Is CheckBox, TypeOf con Is RadioButton
          DataBindings.Add("Checked", src, srcProperty, True, DataSourceUpdateMode.Never)
        Case TypeOf con Is DateTimePicker
          DataBindings.Add("Value", src, srcProperty, True, DataSourceUpdateMode.OnValidation)
      End Select
    End Sub

    #Region "Common.FindControl の仕様が分からないけど、こんな感じだろうか"
    Private Function FindControl(container As Control, name As String) As Control
      Return FindControls(container).FirstOrDefault(Function(c) c.Name = name)
    End Function
    Private Function FindControls(container As Control) As IEnumerable(Of Control)
      Dim controls = container.Controls.Cast(Of Control)()
      Dim children = controls.Select(AddressOf FindControls)
      Return controls.Concat(children.SelectMany(Function(c) c))
    End Function
    #End Region



    上記では、無条件で BindingComplete イベントにアタッチしていますが、
    汎用的にするならば、双方向バインドと片方向バインドを切り替えられるように
    Customers の customer_code プロパティにカスタム属性を付与しておくとか、
    あるいは、ReadValue を抑制するための コールバックイベントを用意するなど
    しておくという手もあるかも。
違反を報告
削除キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[1]: フォームコントロールへのDataBindingsでプロパティが相互反映されない /魔界の仮面弁士 →Re[3]: フォームコントロールへのDataBindingsでプロパティが相互反映されない /やむ
 
上記関連ツリー

Nomalアイコン フォームコントロールへのDataBindingsでプロパティが相互反映されない / やむ (18/11/05(Mon) 13:38) #34016
Nomalアイコン Re[1]: フォームコントロールへのDataBindingsでプロパティが相互反映されない / 魔界の仮面弁士 (18/11/05(Mon) 15:46) #34017
  └Nomalアイコン フォームコントロールへのDataBindingsでプロパティが相互反映されない / 魔界の仮面弁士 (18/11/05(Mon) 17:10) #34019 ←Now
    └Nomalアイコン Re[3]: フォームコントロールへのDataBindingsでプロパティが相互反映されない / やむ (18/11/05(Mon) 17:58) #34020
      └Nomalアイコン Re[4]: フォームコントロールへのDataBindingsでプロパティが相互反映されない / やむ (18/11/06(Tue) 09:51) #34021 解決み!
        └Nomalアイコン Re[5]: フォームコントロールへのDataBindingsでプロパティが相互反映されない / 魔界の仮面弁士 (18/11/06(Tue) 11:12) #34022 解決み!
          └Nomalアイコン Re[6]: フォームコントロールへのDataBindingsでプロパティが相互反映されない / やむ (18/11/06(Tue) 14:20) #34023 解決み!
            └Nomalアイコン Re[7]: フォームコントロールへのDataBindingsでプロパティが相互反映されない / やむ (18/11/06(Tue) 15:42) #34024 解決み!

All 上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信

Mode/  Pass/


- Child Tree -