我有以下代码。
当然,必须有一种更好的方式使用for / next或其他方式对此进行编码,但我只是无法使其正常工作
If CheckBox1.CheckState Then bin(1) = "1" Else bin(1) = "0"
If CheckBox2.CheckState Then bin(2) = "1" Else bin(2) = "0"
If CheckBox3.CheckState Then bin(3) = "1" Else bin(3) = "0"
..
..
..
If CheckBox20.CheckState Then bin(20) = "1" Else bin(20) = "0"
答案 0 :(得分:1)
好的,这应该可以工作,但是请记住,它假设您有20个CheckBoxes
并且该数目永远不会改变,并且bin
数组也永远不会改变元素数目。
Private Sub SyncCheckBoxestoBinValue()
For i As Integer = 1 To 20
bin(i) = Math.Abs(CInt(CType(Me.Controls("CheckBox" & i), CheckBox).Checked)).ToString
Next
End Sub
这里可能需要进行解释。从内而外地工作,这就是了。
Me.Controls("CheckBox" & i)
这将指代在CheckBox1
时匹配i=1
,在CheckBox2
时匹配i=2
的控件。但是,因为该段代码旨在与所有类型的代码一起使用控件,它只能以对象类型返回它,而不是您要搜索的控件的特定类型。
要想对该结果做任何有意义的事情,我们需要告诉编译器它是CheckBox
。因此,现在我们需要将最后的代码包装到其中。
CType(Me.Controls("CheckBox" & i), CheckBox)
现在,编译器将其识别为CheckBox
,我们可以使用它。因此,您要为此目的从CheckBox is checked or not. You've used
Checkstate , but personally I think it's a bit easier to use
Checked中查找。所以...
CType(Me.Controls("CheckBox" & i), CheckBox).Checked
这将返回True
或False
的结果。在VB.Net中,也可以将其视为-1(true)或0(false)。尽管您需要1或0,以便可以将此值分配给bin
数组。我们的操作方式如下
Math.Abs(CInt(CType(Me.Controls("CheckBox" & i), CheckBox).Checked)).ToString
最后,您将1或0的结果分配给与bin
数字相对应的CheckBox
元素
“应该”这样做。
答案 1 :(得分:0)
也许使复选框成为列表,然后按var2_expression
查询结果?为了使用linq来实现所有更好的可读性,
linq
您可能还希望将结果存储为Dim cbList = New List(Of CheckBox) From {checkBox1, checkBox2, checkBox3}
Dim binTmp As List(Of String) = cbList.Select(Function(chk) If(chk.checkState, "1", "0")).ToList()
bin = binTmp
而不是“ 1”,“ 0”以便进行进一步处理。