点击和状态更改VB6

3
根据微软的说法: “在Visual Basic 6.0中,当CheckBox状态在程序中被改变时,会触发Click事件。” 而这正是我不想要的。
我只希望当我点击复选框时才触发click事件,而不是在状态改变时触发。
有什么好的解决方法吗?
谢谢。
3个回答

4

当您从代码填充表单时,可以设置一个标志来忽略更改。如果代码组织不良,这可能会变得混乱。

表单级别:

  Public IgnoreChange As Boolean

表单加载:

  IgnoreChange = False

事件:

  If IgnoreChange Then Exit Sub

您的代码:
  frmReference.IgnoreChange = True
  frmReference.Checkbox1.Checked = True
  frmReference.IgnoreChange = False

代码应该只响应用户的操作。


3

不确定是否最佳,但一种方法是在以编程方式更改状态之前设置名为 IgnoreEvents 的变量,并将其设置为 true。然后,在事件处理程序中,如果该变量为 true,则只需退出事件处理程序而不执行任何操作。


我已经编写了一个小程序,当用户单击复选框时运行。我需要在这里添加一些内容来说明只有在用户单击时才运行,而不是在状态更改时运行,从语法上讲。因为在这个应用程序中几乎不可能找到所有改变状态的地方。 - User1162527
@user1162527 很遗憾,您可能需要重构应用程序才能实现这一点。也许创建一个ClickButton方法来发送实际的点击,并更改所有其他代码以调用该方法而不是在各处发送实际的点击,这样至少会使它变得更容易。 - Hans Olsson

2
将您的Click事件代码放在MouseDown事件中。但是您需要手动设置checkstate
Private Sub Check1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Check1.Value = IIf(Check1.Value = vbChecked, vbUnchecked, vbChecked)
    ' run other necessary code here
End Sub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接