2017-06-19 17 views
0

我點名幾個數組:數組1,數組2,ARRAY3,...,還有一些組合框命名爲:添加多個陣列到相應的組合框

cboArray1,cboArray2,cboArray3,....我怎麼能寫一般將每個數組的元素添加到相應的combox中的代碼。我知道下面的代碼作品,但它不是GENERAL和ABSTRACT。

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.找到所有組合框的形式COMBOX的(容易)2.提取物名稱(簡單)3.找到代碼(困難)4.類似命名的數組...
我可以使用其他集像List,...如果它是有道理的。

+0

因爲要添加特定的數據到一個特定的組合框它不是籠統和抽象。它更容易使用數據源:'cboArray1.DataSource = array1'你也可以編寫一個方法,它需要一個CBO和一個數組(或列表),並且將每個元素複製到items集合 – Plutonix

+0

謝謝。在這兩種方式中,我必須爲每一對數組組合框重複一個類似的代碼。通過將軍,我的意思是避免這種重複的方法。將來,我可能會添加數組和組合框,並且正在尋找避免編寫新代碼的方法。 – ALalavi

+0

閱讀最後一部分 - 創建一個方法並傳遞CBo和數組。 DataSource方法可防止將數據複製到控件。一行代碼。 – Plutonix

回答

0

這裏是你問的使用反射...雖然我不知道這是多麼有用真的是:

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 
+0

謝謝你。它按我的預期工作。另外,我學到了一個新概念:'反思' – ALalavi