就像标题所说的那样,我所要做的就是测试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
答案 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
将始终返回True
或CDate
将失败并出现例外,如果文字不是日期。删除CDate
。
您显示的代码不包含无限循环。也许调用代码执行或CDate
引发的异常会以某种方式扰乱您的程序流程。