VB6(当切换到CausesValidation=False的取消按钮时未触发验证事件)

VB6(当切换到CausesValidation=False的取消按钮时未触发验证事件),vb6,Vb6,我有一个类似于以下简化描述的情况: 带有文本框(称之为txtQty)的表单,用户可以在其中输入整数。事件txtQty_Validate用于验证用户输入,并强制用户在更改焦点之前更正任何错误。除了saidtxtQty之外,这对表单上的所有其他控件都非常有效。我假设这是因为表单上的取消按钮的属性CausesValidation必须设置为false;因此,当用户从txtQty选项卡切换到Cancel按钮(其TabIndex为下一个按钮)时,不会适当触发txtQty\u验证事件 我的第一反应是直接进入t

我有一个类似于以下简化描述的情况:

带有文本框(称之为txtQty)的表单,用户可以在其中输入整数。事件txtQty_Validate用于验证用户输入,并强制用户在更改焦点之前更正任何错误。除了saidtxtQty之外,这对表单上的所有其他控件都非常有效。我假设这是因为表单上的取消按钮的属性CausesValidation必须设置为false;因此,当用户从txtQty选项卡切换到Cancel按钮(其TabIndex为下一个按钮)时,不会适当触发txtQty\u验证事件

我的第一反应是直接进入txtQty\u按键事件(我已经使用该事件使返回键表现为选项卡键)并捕获选项卡键,并临时切换CausesValidation属性,以允许触发txtQty_验证事件。然而,似乎捕获选项卡键并不像我想象的那么容易

有什么建议吗?我假设这不是任何创建表单的人第一次遇到这种情况


谢谢

您可以在Cancel
GotFocus
事件中尝试此功能

Dim b As Boolean

Call txtQty_Validate(b)
If b Then txtQty.SetFocus
假设你有这样的东西

Private Sub txtQty_Validate(Cancel As Boolean)
    If Not IsNumeric(txtQty.Text) Then
        Cancel = True
    End If
End Sub

这完全违背了
Cancel
按钮上的
CausesValidation=False
的目的。现在,当用户在
txtQty
中输入gibberish时,它无法取消表单!这简直令人讨厌。用户:是的,我知道数量不是数字,但我不在乎,因为我想取消表格,撤销我刚才输入的任何内容!请让我走!