【问题标题】:add multiple array to corresponding comboboxes将多个数组添加到相应的组合框
【发布时间】:2017-06-19 00:17:06
【问题描述】:

我有几个名为:Array1、Array2、Array3、...的数组,还有一些名为:cboArray1、cboArray2、cboArray3、...的组合框。

如何编写通用代码将每个数组的元素添加到相应的组合框。我知道以下代码有效,但它不是 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. 查找表单中的所有组合框(简单) 2. 提取组合框的名称(简单) 3. 从代码中找到名称相似的数组(困难) 4. ....
我可以使用其他集合,如 List,...如果有意义的话。

【问题讨论】:

  • 它不是 GENERAL 和 ABSTRACT,因为您正在将 SPECIFIC 数据添加到 SPECIFIC 组合框。更容易使用数据源:cboArray1.DataSource = array1 您还可以编写一个方法,该方法采用 CBO 和数组(或列表)并将每个元素繁琐地复制到 items 集合
  • 谢谢。在这两种方式中,我必须为每对数组组合框重复类似的代码。一般,我的意思是避免这种重复。将来,我可能会添加数组和组合框,并且我正在寻找一种避免编写新代码的方法。
  • 阅读最后一部分 - 创建一个方法并传递 CBo 和数组。 DataSource 方法避免将数据复制到控件。一行代码。
  • 我想我明白你的意思。让我们假设 - 过了一会儿 - 我已经在我的代码中添加了第 100 个数组。现在除了定义该数组之外,我还应该添加另一个类似这样的代码: cboArray100.dataSource= Array100 。我想为每个新定义的数组省略上面的代码。当然,这样的事情是可能的。

标签: arrays vb.net combobox


【解决方案1】:

这就是您使用反射的要求...虽然我不确定这到底有多大用处:

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

【讨论】:

  • 谢谢伙计。它按我的预期工作。另外,我学到了一个新概念:“反射”
猜你喜欢
  • 2012-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-17
  • 2014-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多