创建测试IsDate()文本框的方法

时间:2014-03-03 19:56:02

标签: vb.net

就像标题所说的那样,我所要做的就是测试2个文本框以检查它们是否有效。

这就是我所拥有的。 [我应该提一下,这里没有任何事情,就像它试图检查它是否是一个日期,但是进入一个无限循环,没有显示任何错误,并让我卡在那个文本框中]

Public Function isDate_(ByVal sender As TextBox, ByVal name As String) As Boolean
    If IsDate(CDate(sender.Text)) = True Then
        Return True
    Else
        MessageBox.Show(name & " must be a valid date.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        sender.Focus()
        sender.Select(0, sender.TextLength)
        Return False
    End If
End Function

4 个答案:

答案 0 :(得分:2)

If IsDate(CDate(sender.Text)) = True Then

= True是多余的。 IsDate(CDate(x))是多余的。名为isDate的函数不应该有副作用。

尝试解析日期。

Dim d As Date

If Date.TryParse(DirectCast(sender, Control).Text, d) Then
    ' Parsing succeeded!
Else
    ' Parsing failed.
End If

答案 1 :(得分:1)

我不知道无限循环,但你的CDate正在尝试将文本转换为日期,之后你的IsDate函数可以看到它是否真的是一个日期。试试这种方式:

Dim testDate As Date
If Date.TryParse(sender.Text, testDate) Then

答案 2 :(得分:0)

你不应该与一个只返回一个值的方法的控件交互(这是函数的本质),所以我建议你使用我的函数并调整其他代码:

''' <summary>
''' Validates a Date.
''' </summary>
''' <param name="Date">Indicates the Date to validate.</param>
''' <returns><c>true</c> if Date is valid, <c>false</c> otherwise.</returns>
Private Function ValidateDate(ByVal [Date] As String) As Boolean

    Return Date.TryParse([Date], New Date)

End Function

答案 3 :(得分:0)

简化您的测试:

If IsDate(sender.Text) Then

CDate(sender.Text)会将文字转换为日期,然后IsDate将始终返回TrueCDate将失败并出现例外,如果文字不是日期。删除CDate


您显示的代码不包含无限循环。也许调用代码执行或CDate引发的异常会以某种方式扰乱您的程序流程。