VB2010。我有一个包含约25个复选框的表单,用户可以打开或关闭它。当他们点击OK时,会发生一个相当大的过程。但是,如果复选框的状态没有从表单加载更改为按下“确定”按钮,则无需更新任何内容。
我以前在VB6中做的是基于迭代遍历数组中的所有复选框来计算加载的cheksum:
cheksum = checksum + (2^i)
其中i是复选框元素索引,根据定义它是唯一的。
当用户点击OK按钮时,我会再次计算校验和,如果等于负载校验和,那么我什么都不做。
因此,对于.NET,我试图做同样的事情,但是遇到一个例程,告诉我复选框集合的.Checked状态是否与按钮点击时的加载时相同。我再也没有一个数组,只有一堆独特的复选框。
更新:感谢Jim Mischel的建议。我拿了基本代码,而不是传递我选择的参数,使其更加硬编码,因为我只会在一个模块中使用它。它看起来像:
Private Function GetCrc() As Integer
'we create a list of the checkboxes in the form
Dim boxList As New List(Of CheckBox)
boxList.Add(chkStates)
boxList.Add(chkWorld)
boxList.Add(chkCountries)
'convert the list to an array of checkboxes
Dim boxes() As CheckBox = boxList.ToArray
'calculate the checksum
Dim checkSum As Integer = 0
For i As Integer = 0 To boxes.Length - 1
If boxes(i).Checked Then
checkSum = checkSum + (1 << i)
End If
Next i
Return checkSum
End Function
答案 0 :(得分:1)
您必须编写代码来创建可以循环的集合。我希望我生锈的Visual Basic是可以理解的。 。
public Function GetCheckboxChecksum(ParamArray boxes() as Checkbox)
Dim Checksum as Integer = 0
For i as integer = 0 to boxes.Length - 1
If boxes(i).Checked Then
Checksum = Checksum + (1 << i)
End If
Next I
Return Checksum
End Function
' To call it
Dim Sum as Integer = GetCheckboxChecksum(cb1, cb2, cb3, cb4, cb5)