Запуск события в VB на основе изменения элемента управления в групповом блоке

#vb.net

#vb.net

Вопрос:

У меня есть групповой блок с несколькими флажками (элемент питания), и у каждого из них есть соответствующий элемент управления NumericUpDown (количество). Что касается контекста, то это для проекта, основанного на меню ресторана. Я хочу скрыть кнопку с именем btnSave всякий раз, когда либо флажок снят, либо количество (NumericUpDown) изменяется. В настоящее время у меня есть подпроцедуры btnSave.Hide под CheckBox1_CheckedChanged и NumericUpDown1_CheckedChanged , но я хочу знать, есть ли способ сделать это, когда что-либо в этом групповом блоке изменяется, вместо того, чтобы помещать код под каждую подпроцедуру. Спасибо

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

1. Вы можете использовать один обработчик событий для обработки любого количества событий, сколько захотите. Посмотрите на ключевое слово Handles в объявлении метода event, просто добавьте больше имен элементов управления.

Ответ №1:

Я думаю, вы имели в виду .ValueChanged для NumericUpDown элемента управления. (Нет .CheckedChanged ) Хотя в данном случае это не имеет большого значения, это хороший шаблон для дальнейшего использования. Вместо вызова события вызовите Sub из ваших событий.

Когда у вас есть несколько элементов управления, реагирующих на один обработчик событий, вы можете узнать, какой элемент управления вызвал событие, проверив параметр sender. Поскольку, как вы можете видеть, sender это Object , вам нужно будет привести его к соответствующему типу, чтобы получить свойства CheckBox .

 Private Sub HideSaveButton()
    btnSave.Hide
End Sub

Private Sub CheckBoxInGroupBox_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged, CheckBox2.CheckedChanged
    HideSaveButton()
    Dim WhichCheckBox As CheckBox = DirectCast(sender, CheckBox)
    Select Case WhichCheckBox.Name
        Case "CheckBox1"
            MessageBox.Show("CheckBox1 has changed")
        Case "CheckBox2"
            MessageBox.Show("CheckBox2 has changed")
    End Select
End Sub

Private Sub NumericUpDown1_ValueChanged(sender As Object, e As EventArgs) Handles NumericUpDown1.ValueChanged
    HideSaveButton()
End Sub
  

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

1. Привет, Мэри, большое спасибо за то, что это именно то, что я искал. На самом деле у меня есть .ValueChanged в моем коде, который я просто неправильно ввел здесь. Еще раз спасибо