验证文本框中的日期

时间:2014-03-17 17:11:35

标签: vb.net winforms datetime

我正在尝试在文本框中有效的用户输入,这只会占用日期或空值(因此文本框与日期时间选择器)。以下是条件:

  • 只有日期值(“dd-mm-yyyy”或“dd-mm-yy”)
  • 必须只包含斜杠或数字
  • 日期必须是在
  • 中输入的日期

这是我到目前为止所做的:

Private Sub tbApp1_TextChanged(sender As System.Object, e As System.EventArgs) Handles tbApp1.TextChanged
        If Not Me.tbApp1.Text = String.Empty Then
            If Not DateTime.TryParseExact(tbApp1.Text.Trim, formats, New Globalization.CultureInfo("en-US"), Globalization.DateTimeStyles.None, dtTemp) Then
                If Not tbApp1.Text.Trim = DateTime.Today.Date Then
                    ErrorProvider1.SetError(tbApp1, "This is not a valid date; Enter in this format ('M/d/yyyy' or 'M/d/yy')")
                End If
            Else
                ErrorProvider1.Clear()
            End If
        ElseIf Me.tbApp1.Text.Trim = "" Then
            ErrorProvider1.Clear()
        End If
    End Sub

使用屏蔽文本框

'Private Sub mtbApp1_TypeValidationCompleted(ByVal sender As Object, ByVal e As TypeValidationEventArgs) Handles mtbApp1.TypeValidationCompleted
        If Not Me.mtbApp1.Text = String.Empty Then
            If (Not e.IsValidInput) Then
                ErrorProvider1.SetError(mtbApp1, "The data you supplied must be a valid date in the format mm/dd/yyyy.")
            Else
                ' Now that the type has passed basic type validation, enforce more specific type rules. 
                Dim UserDate As DateTime = CDate(e.ReturnValue)
                If (UserDate = DateTime.Now) Then
                    ErrorProvider1.SetError(mtbApp1, "The data you supplied must be today's date")
                    e.Cancel = True
                End If
            End If
            ErrorProvider1.Clear()
        End If
    End Sub'

我注意到了一个像03/18/2014这样的日期,当它加载回蒙版文本框时会转换为31/82/014。我怎么能解决这个问题?查询将字段拉回

CONVERT(VARCHAR(10),Date,101) AS Date

我在vb中设置为:

 Dim Approval1 As Date = Nothing

然后

 If Not IsDBNull(((WorklistsDS.Tables(0).Rows(0).Item("Approval1")))) Then
                Approval1 = ((WorklistsDS.Tables(0).Rows(0).Item("Approval1")))
            End If

然后加载到蒙版文本框中:

If Approval1 <> Nothing Then
                Me.mtbApp1.Text = Approval1
            End If

1 个答案:

答案 0 :(得分:1)

您还可以使用

简化验证
If IsDate(tbApp1.Text) Then 
    'valid date now just check if date falled within permitted range
    Dim CompDate As Date = CDate(tbApp1.Text)
    Dim MidDate As Date = *enter your min date here*
    Dim MaxDate As Date = *enter your max date here*
    If CompDate >= MinDate AndAlso CompDate <= MaxDate Then
        'Date is within permitted range
        ......
    Else
        'Date outside range
        'Display error
    End If
Else
   'text in tbApp1 is not a date
   'Display Error
End If