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次似乎非常不必要。
你可能会说,我对此非常陌生。谢谢你的帮助。
答案 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()调用之后执行此操作可以解决您的问题。