0

これは簡単な作業であることはわかっていますが、ComboBox.SelectedItemの設定に問題があります。次のコードがあるとしましょう....

Class InnerClass
    Public InnerProperty As String
End Class

Class [Class]
    Public [Property] As String
    Public InnerClass As InnerClass
End Class

Private Sub Form_Load(ByVal sender As Object,ByVal e as EventArgs)
    Dim cls as New [Class]
    Dim innerCls as New InnerClass
    Dim list as New BindingList(Of InnerClass)

    list.Add(New InnerClass)
    list.Add(New InnerClass)
    list.Add(New InnerClass)       
    cls.InnerClass=list.Items(2)
    ComboBox1.DataSource=list 
    ComboBox1.DisplayMember="InnerProperty"
    ComboBox1.DisplayValue="InnerProperty"
    ComboBox1.DataBindings.Add("SelectedItem",cls,"InnerClass") 'always displays 1st item
    list.Add(innerCls)
    ComboBox1.SelectedItem=innerCls 'No effect
End Sub

ComboBox1.SelectedItemを [Class].InnerProperty に正しくバインドするにはどうすればよいですか? ComboBox1.SelectedItemを手動で設定するにはどうすればよいですか?

4

2 に答える 2

1

データバインディングは、フィールドではなくプロパティでのみ機能します。ComboBox ValueMember プロパティを追加し、DataBinding を変更して SelectedValue プロパティを使用しました。

作り直した例を次に示します。

Class InnerClass
  Public Property InnerProperty As String
End Class

Class [Class]
  Public Property [Property] As String
  Public Property InnerClass As InnerClass
End Class

Protected Overrides Sub OnLoad(e As EventArgs)
  MyBase.OnLoad(e)

  Dim cls As New [Class]
  Dim innerCls As New InnerClass

  Dim list As New BindingList(Of InnerClass)
  list.Add(New InnerClass With {.InnerProperty = "aaa"})
  list.Add(New InnerClass With {.InnerProperty = "bbb"})
  list.Add(New InnerClass With {.InnerProperty = "ccc"})
  cls.InnerClass = list(2)
  ComboBox1.DisplayMember = "InnerProperty"
  ComboBox1.ValueMember = "InnerProperty"
  ComboBox1.DataSource = list

  Dim bd As New Binding("SelectedValue", cls, "InnerClass.InnerProperty")
  ComboBox1.DataBindings.Add(bd)
End Sub

なお、「Class」というクラスと「Property」というプロパティを作成することは避けてください。彼らに本当の名前を付けてください。

クラスを使用するには、代わりに SelectedItem を使用する必要があります。

Dim bd As New Binding("SelectedItem", cls, "InnerClass")
于 2013-08-30T15:31:32.067 に答える
0

ComboBox1.SelectedItem を手動で設定するにはどうすればよいですか?

ComboBox1.SelectedItem = Object

表示メンバーと値メンバーに同じものを使用しているため、あなたの場合は「bbb - bbb」だと思います。ComboBox1.SelectedValue = "bbb" の方が読みやすく、入力しやすいです。通常、選択した値またはインデックスを操作する方が簡単で、エラーが発生しにくくなります。ケン・ホワイトが言ったように、それを使用するには値メンバーを表現する必要があります。

于 2013-08-30T16:09:32.843 に答える