VB6:控件字段数组,检查它是否为数字

时间:2013-01-25 14:22:59

标签: arrays vb6 controls numeric

我是Visual Basic 6的新手,所以请耐心等待(并详细解答)。

我正在构建一个表单,我需要检查在其中一个字段中输入的信息是否为数字,否则程序必须发出蜂鸣声。

该字段是控件数组的一部分,名为txtMyField(0)

我写的代码中的最后一件事:

Private Sub txtMyField_Change(Index As Integer)
If Not IsNumeric(txtMyField(0).Text) Then
    Beep
End If
End Sub

我不知道这段代码是否正确,我不知道如何调用Sub来使用它来在插入数据库之前检查字段的值。

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:2)

您可以使用Validate事件执行此操作。您需要确保CausesValidation属性为true,如果是,则将为该控件引发Validate事件。

您的活动可能如下所示:

Private Sub txtMyField_Validate(Index As Integer, Cancel As Boolean)
    If Not IsNumeric(txtMyField(Index).Text) Then
        Beep
        Cancel = True
    End If
End Sub

这将确保控件数组中的所有控件都是数字的(假设它们的CausesValidation属性在启动时设置为True)。如果其中一个控件为空或包含非数字字符,则当控件失去焦点时,您将收到蜂鸣声。

请注意这里的一些事情

  • 发出哔哔声并不是指示验证错误的好方法。表单中用于显示错误的消息框或文本框通常是更好的方法。用户可能听不到您的嘟嘟声,或者可能听不到“嘟嘟”表示“您需要在此字段中提供号码”。
  • 您的代码引用了index = 0的控件。事件可能会触发控件数组中的任何控件,因此当您应该验证控件时,检查control(0)的值是不合逻辑的事情( 5)(例如)。

答案 1 :(得分:1)

而不是发出哔哔声,你也可以让你的texbox只接受某些键

例如一个只接受数字键和退格键的文本框:

Private Sub Text1_KeyPress(KeyAscii As Integer)
  KeyAscii = NrOnly(KeyAscii)
End Sub

Private Function NrOnly(intKey As Integer)
  Dim intReturn As Integer
  intReturn = intKey
  Select Case intKey
    Case vbKeyBack
    Case vbKey0 To vbKey9
    Case Else
      intReturn = 0
  End Select
  NrOnly = intReturn
End Function

您可以为NrOnly函数添加更多智能以允许更多密钥,或检查某些边界

要小心,因为用户仍然可以使用鼠标通过复制和粘贴

输入其他数据