0

グループに8つのチェックボックスがあり、基本的にbinairの10進値が必要な場合

チェックボックス1.checked = true チェックボックス2.checked = true

その場合、値は (2 ^ 0) + (2 ^ 1) = 3 でなければなりません (0 = チェックボックス 1 および 1 = チェックボックス 2 など)。

解決策は簡単かもしれませんが、今まではうまくいきませんでした。私が今持っているコードは次のとおりです。

    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

しかし、if/elseが機能し始める前に、tはすでに7になっているようです(チェックボックスが8つあるため)。

誰かがこの問題を解決する方法を知っていますか、それとも私を正しい方向に向けることができますか? ありがとう。

4

1 に答える 1

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 = 2 番目のオプション、3 = 1 番目と 2 番目のオプションなど)。

于 2012-10-08T14:03:32.063 に答える