将数组映射到Controls时,请避免重复代码

时间:2016-07-29 20:27:37

标签: .net arrays vb.net

我有一个大小为8的位数组,我遍历位数组并根据该位是否为零更新每个相应位的复选框。到目前为止,我有以下内容:

        Dim btArr6 As BitArray = New BitArray(8)
        ......
        ......
        If btArr6(0) = True Then
             d2b0.Checked = True
        End If
        If btArr6(1) = True Then
            d2b1.Checked = True
        End If
        If btArr6(2) = True Then
            d2b2.Checked = True
        End If
        If btArr6(3) = True Then
            d2b3.Checked = True
        End If
        If btArr6(4) = True Then
            d2b4.Checked = True
        End If
        If btArr6(5) = True Then
            d2b5.Checked = True
        End If
        If btArr6(6) = True Then
            d2b6.Checked = True
        End If
        If btArr6(7) = True Then
            d2b7.Checked = True
        End If

我认为它有重复的代码。我想如果我有类似d2b和amp;的东西会更好I.但是它不正确,因为它不是字符串。我怎么能摆脱重复的代码?

由于

2 个答案:

答案 0 :(得分:1)

至少,这会更短:

d2b0.Checked = btArr6(0)
d2b1.Checked = btArr6(1)
...
  

您的代码不会取消检查控件,因为它只检查/作用于一个状态。对于这些事情通常情况并非如此,但如果是,则可以使用单行If

If btArr6(0) Then d2b0.Checked = True

当数组或List映射到一组控件时,创建/维护这些控件的数组,以便您可以使用循环。如果多次使用,您可以声明并构建一个数组:

Public Class Form1
    ' declaration
    Private d2b As CheckBox()

重要提示:不要在声明中初始化(即列出控件) - 它们还不存在。将其初始化为表单加载:

d2b = New CheckBox() {CheckBox1, CheckBox2, CheckBox3, CheckBox4}

' elsewhere to use it:

For n As Int32 = 0 To d2b.Count - 1
    d2b(n).Checked = btArr6(n)
Next

再次,如果您不希望通过循环取消选中检查,请使用If语句。相同的方法将用于映射布尔数组:

Private boolAry(8) As Boolean
...
myChecks(n).Checked = boolAry(n)

事实上,相同的概念可用于将数据从任何数组映射到控件集。

答案 1 :(得分:-2)

这是避免与现有代码重复的最简单方法:

Dim btArr6 As BitArray = New BitArray(8)

Dim d2b = { d2b0, d2b1, d2b2, d2b3, d2b4, d2b5, d2b6, d2b7 }

For i = 0 To 7
    If btArr6(i) = True Then
        d2b(i).Checked = True
    End If
Next