2013-08-30 41 views
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 

回答

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) 
+0

那麼這就是......在VB6中,您可以使用(i)索引創建控件數組。在VB.NET中,你不能。我重新命名我的複選框獨特的名稱,如chkStates,chkWorld,chkAerial等 – sinDizzy

+0

@sinDizzy:我的意思是,你可以調用名稱列表的GetCheckboxChecksum方法。它爲你建立陣列。是的,這是一個痛苦,但你只需要編寫一次代碼。那就是'GetCheckboxChecksum(chkStates,chkStates,chkWorld,chkAerial,chkFoo,chkBarby)' –

+0

是的,我明白你的觀點。這實際上是我已經想到的。但是,可以說我的表單有30個甚至50個複選框。它可以非常快速地變得非常單調乏味。還是)感謝你的建議。我可能會這樣做。 – sinDizzy

相關問題