.Net中TextBox对于焦点的控制

假设我们要作如下的设计,有两个TextBox,第一个TextBox要求的数据为日期类型,当焦点离开时把输入的日期格式进行统一。代码很简单,如下所示。


TextBox1.Text = CDate(TextBox1.Text).ToString("yyyy/MM/dd")

但是,如果要实现上述功能,在哪个事件中写代码最为合适呢?另外,在焦点转移之前,还要对输入的数据进行妥当性检查, 比如在这个例子中检查输入的数据是否是合理的日期。要对如上问题做出比较好地解决,首先要知道TextBox和焦点控制相 关的事件的发生顺序。

下图是TextBox中和焦点移动相关的事件

事件说明
Enter得到焦点的时候发生。
GotFocus得到焦点的时候发生,建议不使用。
Leave失去焦点的时候发生。
Validating失去焦点的时候发生。经常在对输入的数据进行校验的时候使用,可以中止焦点的移动。
Validated失去焦点的时候发生。经常被用在输入数据校验成功之后的处理。
LostFocus失去焦点的时候发生。建议不使用。

它们发生顺序如下所示

用鼠标,或者使用Focus方法进行焦点控制的时候其他方法进行焦点控制的时候共通法则
TextBox1.LostFocus

TextBox1.Leave

TextBox1.Validating

TextBox1.Validated

TextBox2.Enter

TextBox2.GotFocus
TextBox1.Leave

TextBox1.Validating

TextBox1.Validated

TextBox2.Enter

TextBox1.LostFocus

TextBox2.GotFocus
TextBox1.Leave

TextBox1.Validating

TextBox1.Validated

TextBox2.Enter

有的人习惯把处理写在LostFocus事件中。从这个图可以看出,妥当的写法应该是,把对数据的检查写在Validating事件中。 而通过检查之后的处理,写在Validated事件中。而且,在Validating事件中,可以中止焦点的转移。也就是说,如果数据 检查不合格,可以不让焦点转移,禁止用户继续填下一个项目,知道这个项目正确的被填入。

现在回到刚才的那个例子,具体实现代码如下所示:

Private Sub TextBox1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating

    If Not IsDate(TextBox1.Text) Then
       
MsgBox("请输入有效日期。", MsgBoxStyle.Information)
        e.Cancel =
True
   
End If

End Sub

Private Sub TextBox1_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Validated

    TextBox1.Text = CDate(TextBox1.Text).ToString("yyyy/MM/dd")

End Sub

这样,如果输入的数据不正确,将无转移到其他TextBox,也无法触发其他按钮。但是,如果有一些按钮,不管输入的数据是不是正确 都需要可以触发的话(比如取消按钮),只要设置那个按钮的CausesValidation属性为False即可。

这些只不过是一些很简单的东西,提供给和我一样的新手参考。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值