Есть ли какой-либо рекомендуемый код для отображения определенного значения в отдельной метке, если в Vb установлены любые три флажка из шести?

#vb.net

#vb.net

Вопрос:

Я создал 6 флажков в Vb, и я хочу закодировать, что если любые три из них будут отмечены, то определенное значение будет показано в отдельной метке.

Ответ №1:

Я бы создал массив ваших флажков и подключил их к общему обработчику CheckChanged(). Затем вы можете использовать простой запрос LINQ, чтобы подсчитать количество из них, которые отмечены.

Что-то вроде:

 Public Class Form1

    Private CheckBoxes() As CheckBox

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        ' change the below to the names of your six checkboxes:
        CheckBoxes = {CheckBox1, CheckBox2, CheckBox3, CheckBox4, CheckBox5, CheckBox6}
        For Each cb In CheckBoxes
            AddHandler cb.CheckedChanged, AddressOf CheckBoxes_CheckedChanged
        Next
        Label1.Text = "Select at least three checkboxes."
    End Sub

    Private Sub CheckBoxes_CheckedChanged(sender As Object, e As EventArgs)
        If CheckBoxes.Where(Function(cb) cb.Checked).Count >= 3 Then
            Label1.Text = "Thank you!"
        Else
            Label1.Text = "Select at least three checkboxes."
        End If
    End Sub

End Class
  

Комментарии:

1. Нет необходимости в цикле и AddHandler . Вы можете выбрать все CheckBoxes в конструкторе, открыть окно Свойств , нажать кнопку События , а затем дважды щелкнуть CheckedChanged событие, чтобы сгенерировать обработчик события со всеми элементами управления в Handles предложении. Затем вы можете создать список CheckBoxes в обработчике событий либо явно, либо, если они все находятся в одном контейнере и они единственные CheckBoxes в этом контейнере, с помощью LINQ: Dim checkBoxes = Controls.OfType(Of CheckBox)() .

2. Также нет необходимости вызывать Where и Count as Count принимает те же предикаты, которые Where выполняют: If CheckBoxes.Count(Function(cb) cb.Checked) >= 3 Then .

3. Спасибо @jmcilhinney, я просто всегда вводил его таким образом с помощью Where (), потому что для меня это «выглядит правильно». От старых привычек трудно избавиться. Что касается других предложений, определенно существует более одного способа освежевать кошку…