ОК, это должно работать, но имейте в виду, что предполагается, что у вас есть 20 CheckBoxes
, и это число никогда не изменится, и что массив bin
также никогда не изменит количество элементов.
Private Sub SyncCheckBoxestoBinValue()
For i As Integer = 1 To 20
bin(i) = Math.Abs(CInt(CType(Me.Controls("CheckBox" & i), CheckBox).Checked)).ToString
Next
End Sub
Объяснение может быть здесь в порядке.Работа идет изнутри, здесь идет ..
Me.Controls("CheckBox" & i)
Это ищет в ваших элементах управления тот, который соответствует CheckBox1
, когда i=1
, CheckBox2
, когда i=2
и т. Д.Однако, поскольку этот фрагмент кода предназначен для работы со всеми видами элементов управления, он может возвращать его только как тип объекта, а не как определенный тип элемента управления, который вы ищете.
Чтобы иметь возможность сделать что-то существенное с этим результатом, нам нужно сообщить компилятору, что это CheckBox
.Так что теперь нам нужно обернуть этот последний бит кода в это.
CType(Me.Controls("CheckBox" & i), CheckBox)
Теперь у нас есть кое-что, что компилятор распознает как CheckBox
, и мы можем работать с ним.Итак, вы хотите узнать из CheckBox is checked or not. You've used
Checkstate , but personally I think it's a bit easier to use
Checked` для этой цели.Итак ...
CType(Me.Controls("CheckBox" & i), CheckBox).Checked
Возвращает результат True
или False
.В VB.Net это также можно увидеть как -1 (истина) или 0 (ложь).хотя вы хотите 1 или 0, чтобы вы могли присвоить это значение вашему массиву bin
.Как мы это делаем, как показано ниже:
Math.Abs(CInt(CType(Me.Controls("CheckBox" & i), CheckBox).Checked)).ToString
Наконец, ваш результат 1 или 0 присваивается элементу bin
, который соответствует CheckBox
числу
Это "должно" сделать это.