Мой динамически созданный обработчик события щелчка CheckBox не запускается - PullRequest
0 голосов
/ 11 апреля 2020

Я пишу windows приложение для управления серверами (apache, nginx, tomcat, et c) для разработчиков. Я создаю элементы управления динамически для каждого сервера, поскольку они определяются конфигурацией. Мне удалось создать обработчики для кнопок и списков без проблем, но обработчик для флажков не запускается. Я думаю, что делаю то же самое, но, очевидно, я что-то упускаю.

Это обработчик. Существует только один для всех флажков

Private Sub AddTheCheckboxClick(rCheckBox As CheckBox)
    AddHandler rCheckBox.Click, Sub(rSender, rEventargs)
                                    Cursor = Cursors.WaitCursor
                                    Dim lStatus As Boolean = False
                                    Cursor = Cursors.Default
           'do some stuff here for the relevant server

                                End Sub
End Sub

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

Этот код копирует элемент управления из шаблона в соответствующее место на экране, а затем добавляет обработчик. Весь набор элементов управления. создается один раз для сервера.

'Service checkbox
.Controls.Add(CopyPlaceControl(lDinamicListview, chkServerService, lLocation, True, lGenericServer))
AddTheCheckboxclick(chkServerService)

'Server switch and button click event handler
lNewServerSwitch = CopyPlaceControl(lDinamicListview, bServerSwitch, lLocation, True, lGenericServer)
.Controls.Add(lNewServerSwitch)
AddThebuttonclick(lNewServerSwitch)

Я видел ответ на аналогичный запрос для ASP, и он был разрешен путем задания для свойства AutoPostback значения true, но это свойство не существует в vb. net и это, вероятно, не имеет значения в моем контексте.

Я также попытался явно вызвать событие в коде, просто чтобы проверить его срабатывание при вызове, но я не нашел никакого способа сделать это. Для кнопки это просто, как в .Performclick (), но я не нашел ее для флажка.

1 Ответ

0 голосов
/ 11 апреля 2020

Похоже, метод CopyPlaceControl создаст новый элемент управления на основе заданного (chkServerService), а затем новый элемент управления будет добавлен в коллекцию .Control.
Однако вы добавляете обработчик щелчков к исходному флажку (chkServerService) ) не новый.

'Service checkbox
Dim newCheckBox = 
    CopyPlaceControl(lDinamicListview, chkServerService, lLocation, True, lGenericServer)
AddTheCheckboxclick(newCheckBox)

.Controls.Add(newCheckBox)
...