2012-10-08 42 views
0

我有一组中的8个复选框和我希望有binair十进制值basicly如果VB.net十进制值

checkbox1.checked =真 checkbox2.checked =真

然后值必须是(2^0)+(2^1)= 3(0 = checkbox1和1 = checkbox2等)

我知道解决方案可能很简单,但直到现在我不能让它工作。我现在所拥有的代码如下:

Private Function AnyOptionsChecked() As Boolean 
    For Each chk As CheckBox In GroupBox1.Controls 
     t = t + 1 
     If chk.Checked = True Then 
      i = i + 2^t 
     End If 
    Next 
    Return False 
End Function 

但似乎t是已经在7(原因有8个复选框)之前的if/else开始工作。

有人知道如何解决这个问题,或能够指出我在正确的方向吗? 谢谢。

回答

1

你的函数返回一个布尔值(true/false),但如果你想知道选项已经被选中,你真的想返回一个数字。这个怎么样:

Private Function OptionsChecked() As Integer 
    Dim t As Integer = 0 
    Dim result As Integer = 0 
    For Each chk As CheckBox In GroupBox1.Controls 
     If chk.Checked = True Then 
      result = result + 2^t 
     End If 
     t = t + 1 
    Next 
    Return result 
End Function 

所以当任何选项都检查了我的函数返回零。否则,它将返回一个整数,指示检查了哪些选项(1 =第一个选项,2 =第二个选项,3 =第一个和第二个选项等)。

+0

感谢您的正确答案。不知怎的,它有点不同,然后我预期。如果你只选择CheckBox1,它会从128开始,而你会希望CheckBox1从1开始。我要做的就是将表单中的复选框转过来,这并不是什么大问题,但它仍然让我有点困惑哈哈!非常感谢你回答它像一个魅力工作! –

+1

仅仅因为你把它叫做checkbox1,并不意味着它是集合中的第一项。所以在这个意义上它不是很强大。在表单中添加另一个复选框可能会完全改变集合中复选框的排序,从而改变函数的结果。所以它是有用的,因为解决方案取决于你想要达到的目标。 –

+0

对。再次感谢您的回复。将为未来记住这一点! –