【问题标题】:My dynamically created CheckBox click event handler is not firing我动态创建的 CheckBox 单击事件处理程序未触发
【发布时间】:2020-04-12 04:24:23
【问题描述】:

我正在编写一个 Windows 应用程序来为开发人员管理服务器(apache、nginx、tomcat 等)。我为每个服务器动态创建控件,因为它们是由配置驱动的。我已经成功地为按钮和组合框创建了处理程序,但没有触发复选框的处理程序。我想我做的完全一样,但显然我错过了一些东西。

这是处理程序。所有复选框只有一个

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() 中的按钮很容易,但我还没有找到复选框。

【问题讨论】:

  • chkServerService 是做什么的?您如何创建/初始化 CheckBoxes(不将它们添加到容器中)?
  • 对于按钮,您将 CopyPlaceControl 的返回值分配给变量 (lNewServerSwitch )before adding the variable to the controls collection and calling AddThebuttonclick`;但是您对复选框遵循不同的模式。这可能是问题的根源.
  • 是的,抱歉,我的意思是“CopyPlaceControl 是做什么的?”
  • resolved by setting the AutoPostback property to true but this property does not exist in vb.net 这不是“vb.net”问题。这是一个 WinForms 与 ASP.Net 的问题。不同的平台。
  • 我在踢自己我没看到。添加模板控件而不是动态生成的控件。现在都在工作。非常感谢你们的帮助。

标签: vb.net winforms dynamic


【解决方案1】:

看起来CopyPlaceControl 方法将基于给定的控件(chkServerService)创建新控件,然后将新控件添加到.Control 集合中。
但是,您将单击处理程序添加到原始复选框(chkServerService)而不是新复选框。

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

.Controls.Add(newCheckBox)

【讨论】:

    猜你喜欢
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多