我有一个vb.net应用程序,我有一个组合框,它应该包含一个显示成员(文本)和一个值成员(整数)。
问题是: 我想在表单加载时为该组合框设置一个默认值,但我没有加载事件,因为我动态创建表单和组合框。我使用了combobox.selectedvalue = 6但它不起作用。
注意:我不能使用selectedindex属性,因为有时值来自DB表主键,它与组合框索引不同。
代码:
Private Sub fill_combo(ByRef combo As ComboBox, ByVal nodes As HashMap)
Dim comboData = New BindingList(Of KeyValuePair(Of Integer, String))
nodes.movefirst()
Do While Not nodes.eof
If check_atrbValue(nodes.key, nodes.value, "string", "other") Then
comboData.Add(New KeyValuePair(Of Integer, String)(nodes.key, nodes.value))
End If
nodes.movenext()
Loop
combo.DataSource = comboData
combo.ValueMember = "Key"
combo.DisplayMember = "Value"
combo.selectedvalue=6
End Sub
答案 0 :(得分:0)
即使您动态创建了UIElement,也会有加载的事件。但是既然你以这种方式创建它,你也应该在代码中挂钩事件处理程序:
AddHandler mycombobox.Loaded, Sub(sender As System.Object,
e As System.Windows.RoutedEventArgs) _
CType(sender, ComboBox).SelectedIndex = 2
但也许你会想要对另一个事件过于关注,比如说你的数据库加载了数据......
AddHandler ??.DataAvailable, Sub(???) SelectionComboBox.SelectedIndex = 2
其中SelectionComboBox是您的类的成员,您使用后面的代码初始化/添加。和DataAvailable是你的事件。它可能像:
Public Event DataAvailable(ByVal DefaultValue As Integer)
因此您可以在事件处理程序中使用该值。 (只是一个想法):=)。
如果你多次添加/删除ComboBox(以避免内存泄漏),请不要忘记删除处理程序