2016-07-29 68 views
1

我有一个大小为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 &一样的东西会更好。但是它不是正确的,因为它不是字符串。任何想法,我怎么能摆脱重复的代码?

感谢

回答

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) 

事实上,同样的概念可用于从任何数组映射数据来设置的控件。

+0

什么解决方案!再次感谢你Plutonix。你已经帮了我很多次,我真的很感谢它 – success

+0

你说得对,当你发现自己重复代码或代码模式时,总会有更好的方法。它被称为干燥原则 - 不要重复自己 – Plutonix

+0

我会记住你的忠告 – success

-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