0
VB2010。我有一個包含大約25個複選框的表單,用戶可以打開或關閉。當他們點擊確定後,就會有一個相當大的進程。但是,如果複選框的狀態不會從表單加載更改爲按下OK按鈕,那麼沒有任何更新。確定複選框是否發生變化的一種CRC
我用於VB6做的是計算基於通過所有的複選框以陣列迭代作爲等負載的cheksum:
cheksum = checksum + (2^i)
其中i是複選框元素索引並且是獨特的只是通過定義。
當用戶點擊確定按鈕時,我會再次計算校驗和,如果等於負載校驗和,那麼我什麼也不做。
因此,我試圖做同樣的事情,但有麻煩提出了一個例程,告訴我,如果檢查框的集合的.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
那麼這就是......在VB6中,您可以使用(i)索引創建控件數組。在VB.NET中,你不能。我重新命名我的複選框獨特的名稱,如chkStates,chkWorld,chkAerial等 – sinDizzy
@sinDizzy:我的意思是,你可以調用名稱列表的GetCheckboxChecksum方法。它爲你建立陣列。是的,這是一個痛苦,但你只需要編寫一次代碼。那就是'GetCheckboxChecksum(chkStates,chkStates,chkWorld,chkAerial,chkFoo,chkBarby)' –
是的,我明白你的觀點。這實際上是我已經想到的。但是,可以說我的表單有30個甚至50個複選框。它可以非常快速地變得非常單調乏味。還是)感謝你的建議。我可能會這樣做。 – sinDizzy