我有一个大小为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.但是它不正确,因为它不是字符串。我怎么能摆脱重复的代码?
由于
答案 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