0

VB2010。我有一个包含大约 25 个复选框的表单,用户可以打开或关闭这些复选框。当他们单击“确定”时,会出现一个相当大的过程。但是,如果复选框的状态没有从表单加载更改为按下 OK 按钮,则没有什么可更新的。

我以前在 VB6 中所做的是基于遍历数组中的所有复选框来计算负载校验和,如下所示:

cheksum = checksum + (2^i) 

其中 i 是复选框元素索引,并且根据定义是唯一的。

当用户单击“确定”按钮时,我将再次计算校验和,如果等于负载校验和,则我什么也不做。

因此,对于 .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
4

1 回答 1

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)
于 2013-08-30T21:55:43.270 回答