有三个输入日期的文本框,在每一个失去焦点的时候(lostFocus)判断它的日期是否大于前面的,小于后面的,如果判断不符合,就把焦点设到那个文本框上.
我在多的时候让他分别和他前面的比较,与后面的比较,但是出现了死循环, 如三个文本框1,2,3依此输入8.5 ,8.6,8.7,然后我在把中间那个日期改为8.8,这时,2号和3号会不断因为触发lostFocus事件而发生死循环。
寻求一个合理的实现验证三个文本框输入的日期从小到大,即1号日起<2号<3号日期
我在多的时候让他分别和他前面的比较,与后面的比较,但是出现了死循环, 如三个文本框1,2,3依此输入8.5 ,8.6,8.7,然后我在把中间那个日期改为8.8,这时,2号和3号会不断因为触发lostFocus事件而发生死循环。
寻求一个合理的实现验证三个文本框输入的日期从小到大,即1号日起<2号<3号日期
你可以入在Text1_Change或是Text1_KeyDown來判斷
Private Sub Text1_LostFocus()
If Text1.Text > Text2.Text Then
Text1.SetFocus
End If
End Sub
Private Sub Text2_LostFocus()
If Text1.Text > Text2.Text Or Text2.Text < Text2.Text Then
Text2.SetFocus
End If
End Sub
Private Sub Text2_LostFocus()
If Text2.Text < Text2.Text Then
Text3.SetFocus
End If
End Sub
在焦点转换到一个(第二个)控件之前发生,此时该控件的 CausesValidation 属性值设置为True。语法
Private Sub object_Validate(KeepFocus As Boolean)Validate事件语法包含下面几部分:部分 描述
object 一个对象表达式,其值为“应用于”列表中的一个对象。
KeepFocus 确定控件是否失去焦点的值。KeepFocus设置为True时,控件保持焦点。
说明
Validate 事件和CausesValidation 属性协同工怍,防止控件失去焦点直到满足确定的准则。重点 只有在即将获得焦点的控件的CausesValidation属性值设置为True时,Validate事件才发生。
是不是好点?
现在把我侧使用的代码贴出来共享以下:
Private Sub Text1_Validate(Cancel As Boolean)
If Text1.Text = "" Or Text2.Text = "" Then
Exit Sub
End If If CDate(Text1.Text) > CDate(Text2.Text) Then
MsgBox ("The First")
Cancel = True
End IfEnd SubPrivate Sub Text2_Validate(Cancel As Boolean)
If Text1.Text = "" Or Text2.Text = "" Then
Exit Sub
End If If CDate(Text1.Text) > CDate(Text2.Text) Then
MsgBox ("The Second")
' Text2.SetFocus
Cancel = True
End If
If Text3.Text = "" Then
Exit Sub
End If
If CDate(Text2.Text) > CDate(Text3.Text) Then
MsgBox ("The Second > The Third")
' Text2.SetFocus
Cancel = True
End If
End Sub
Private Sub Text3_Validate(Cancel As Boolean)
If Text2.Text = "" Or Text3.Text = "" Then
Exit Sub
End If
If CDate(Text2.Text) > CDate(Text3.Text) Then
MsgBox ("The Second > The Third")
' Text2.SetFocus
Cancel = True
End If
End Sub