VB6是否将文本框输入限制为1900到当前日期范围内的数字?

VB6是否将文本框输入限制为1900到当前日期范围内的数字?,vb6,Vb6,如何将文本框输入限制为1900到当前日期范围内的数字 Private Sub txtYear_Change() If Not IsNumeric(txtYear.Text) Then txtYear.Text = "" ElseIf txtYear.Text < 1900 Or txtYear.Text > Year(Date) Then txtYear.Text = "" End If Exit Sub Private S

如何将文本框输入限制为1900到当前日期范围内的数字

Private Sub txtYear_Change()
    If Not IsNumeric(txtYear.Text) Then
        txtYear.Text = ""
    ElseIf txtYear.Text < 1900 Or txtYear.Text > Year(Date) Then
        txtYear.Text = ""
    End If
Exit Sub 
Private Sub txtu Change()
如果不是数字(txtYear.Text),则
txtYear.Text=“”
如果txtYear.Text<1900或txtYear.Text>Year(日期),则
txtYear.Text=“”
如果结束
出口接头

您需要将该代码放置在
txtYear\u Validate()
事件中,而不是更改事件中。每次击键都会触发更改,因此几乎总是会立即失败。在验证事件中,在完成之前不要验证条目。

如中所述,您应该使用
验证事件

我只想补充一点,您的代码仍然有一个缺陷,即它允许用户输入十进制数字(例如1900.10)。为了避免这种情况,您可以添加另一个条件:

Private Sub txtYear_Validate(Cancel As Boolean)
    If Not IsNumeric(txtYear.Text) Then
        txtYear.Text = ""
    ElseIf txtYear.Text < 1900 Or txtYear.Text > Year(Date) Then
        txtYear.Text = ""
    ElseIf Fix(txtYear.Text) <> txtYear.Text Then   ' Choose one:
        txtYear.Text = Fix(txtYear.Text)            ' - Replace it with the integer part.
        'txtYear.Text = ""                          ' - Clear the text.
    End If
End Sub
Private Sub txtwear\u验证(取消为布尔值)
如果不是数字(txtYear.Text),则
txtYear.Text=“”
如果txtYear.Text<1900或txtYear.Text>Year(日期),则
txtYear.Text=“”
ElseIf Fix(txtYear.Text)txtYear.Text然后“选择一个:
txtYear.Text=Fix(txtYear.Text)“-将其替换为整数部分。
“txtYear.Text=”“”-清除文本。
如果结束
端接头

优点。为了进一步说明,最好在输入无效时将Cancel设置为True,以便文本控件保留焦点(用于更正),并确保窗体上的Cancel按钮的
CausesValidation
属性设置为false,以便用户可以在没有有效输入的情况下取消。@BillHileman我同意。我只是不想更改OP的逻辑,但是当然,将
取消设置为True是一个更好的视觉指示。谢谢您的回复!