Arrays 将多个数组添加到相应的组合框中
我有几个数组名为:Array1,Array2,Array3。。。还有一些组合框名为:cboArray1,cboArray2,cboArray3 如何编写一个通用代码,将每个数组的元素添加到相应的combox中。我知道下面的代码是有效的,但它不是一般的和抽象的Arrays 将多个数组添加到相应的组合框中,arrays,vb.net,combobox,Arrays,Vb.net,Combobox,我有几个数组名为:Array1,Array2,Array3。。。还有一些组合框名为:cboArray1,cboArray2,cboArray3 如何编写一个通用代码,将每个数组的元素添加到相应的combox中。我知道下面的代码是有效的,但它不是一般的和抽象的 For i = 0 To Array1.Length - 1 cboArray1.Items.Add(Array1(i)) Next For i = 0 To Array2.Length - 1
For i = 0 To Array1.Length - 1
cboArray1.Items.Add(Array1(i))
Next
For i = 0 To Array2.Length - 1
cboArray2.Items.Add(Array2(i))
Next
...
工作程序可能如下:1。在form(easy)2中查找所有组合框。提取combox(简单)3的名称。从代码(困难)4中查找类似的命名数组我可以使用其他集合,如列表。。。如果有意义的话。以下是您使用反射的要求……尽管我不确定这是否真的有用:
Public Class Form1
Private Array1 As String() = {"cat", "dog", "fish"}
Private Array2 As String() = {"alpha", "beta", "gamma"}
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
WireComboBoxes(Me)
End Sub
Private Sub WireComboBoxes(ByVal container As Control)
For Each ctl As Control In container.Controls
If TypeOf ctl Is ComboBox AndAlso ctl.Name.ToUpper.StartsWith("CBO") Then
Dim cb As ComboBox = DirectCast(ctl, ComboBox)
Dim arrName As String = cb.Name.Substring(3)
Dim fi As System.Reflection.FieldInfo = Me.GetType.GetField(arrName, Reflection.BindingFlags.Instance Or Reflection.BindingFlags.Public Or Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.IgnoreCase)
If Not IsNothing(fi) Then
cb.DataSource = fi.GetValue(Me)
End If
ElseIf ctl.HasChildren Then
WireComboBoxes(ctl)
End If
Next
End Sub
End Class
它不是一般的和抽象的,因为您正在向特定的组合框添加特定的数据。使用数据源更容易:
cboArray1.datasource=array1
您还可以编写一个方法,该方法接受一个CBO和一个数组(或列表),并将每个元素乏味地复制到items集合谢谢。在这两种情况下,我必须为每对数组组合框重复一个类似的代码。一般来说,我指的是避免这种重复的方法。将来,我可能会添加数组和组合框,我正在寻找一种避免编写新代码的方法。数据源方法可以避免将数据复制到控件。一行代码,我想我明白你说的。让我们假设——过了一会儿——我已经在代码中添加了第100个数组。现在,除了定义该数组之外,我还应该添加另一个类似这样的代码:cboArray100.dataSource=Array100。对于每个新定义的数组,我想省略上面的代码。当然,这是可能的。谢谢你。正如我所预料的那样。此外,我学到了一个新概念:“反思”