VB2010. ユーザーがオンまたはオフにできる約 25 個のチェックボックスを含むフォームがあります。[OK] をクリックすると、かなり大きなプロセスが発生します。ただし、チェックボックスの状態がフォームの読み込みから [OK] ボタンの押下に変化しない場合、更新するものはありません。
私がVB6で行っていたのは、配列内のすべてのチェックボックスを繰り返し処理することに基づいて、ロード時にチェックサムを計算することでした:
cheksum = checksum + (2^i)
ここで、i はチェックボックス要素のインデックスであり、定義上一意でした。
ユーザーが [OK] ボタンをクリックすると、チェックサムが再度計算され、ロード チェックサムと等しい場合は何もしません。
したがって、.NET でも同じことをしようとしていますが、チェックボックスのコレクションの .Checked 状態がロード時とボタン クリック時と同じであるかどうかを教えてくれるルーチンを思い付くのに問題があります。配列はもうありません。一意の名前のチェックボックスがたくさんあります。
更新: Jim Mischel の提案に感謝します。基本コードを取得し、パラメーターを渡す代わりに、1 つのモジュールでのみ使用するため、よりハード コード化することを選択しました。次のようになります。
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