0
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 次似乎是非常不必要的。

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

4

1 回答 1

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() 调用后执行此操作可以解决您的问题。

于 2013-10-17T22:56:38.050 回答