一种用于确定复选框是否已更改的CRC

时间:2013-08-30 21:47:30

标签: vb.net checkbox state checksum

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

1 个答案:

答案 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)