VB 2010:关于_CheckedChanged

时间:2013-10-17 22:18:37

标签: visual-studio-2010 checkbox

Private Sub OpTest_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles OpArhein.CheckedChanged
    configSave()
    MsgBox("OpTest changed.")

End Sub

CheckBox设置为选中状态。当我开始调试时,运行并弹出此MsgBox,但configSave()中的MsgBox却没有。 configSave()在此之前定义。

在调试时,如果我取消选中或检查CheckBox,那么两个MsgBox都可以正常运行。

为什么这会在启动时运行? 我该如何防止它在启动时运行? 我计划拥有48个CheckBox,因此在启动时运行48次似乎非常不必要。

你可能会说,我对此非常陌生。谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

Private Sub OpTest_CheckedChanged(sender As System.Object, e As System.EventArgs) _
    Handles OpArhein.CheckedChanged

这是一个特定于VB.NET的怪癖,它不会发生在C#项目中。它是由代码中的 Handles 关键字引起的。它导致事件过早订阅。当表单构造函数初始化复选框时,事件处理程序将运行。太早了。

解决方法是稍后订阅。删除Handles OpArhein.CheckChanged子句并在表单中添加构造函数。看起来像这样:

Public Sub New()
    InitializeComponent()
    AddHandler OpArhein.CheckedChanged, AddressOf OpTest_CheckedChanged
End Sub

AddHandler语句与Handles关键字的作用相同,但是显式地执行。并且让您确定事件订阅时完全确定。在InitializeComponent()调用之后执行此操作可以解决您的问题。