.Net中TextBox对于焦点的控制
来源:互联网 发布:js 业务逻辑 模块 编辑:程序博客网 时间:2024/06/05 09:47
假设我们要作如下的设计,有两个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.GotFocusTextBox1.Leave
↓
TextBox1.Validating
↓
TextBox1.Validated
↓
TextBox2.Enter
↓
TextBox1.LostFocus
↓
TextBox2.GotFocusTextBox1.Leave
↓
TextBox1.Validating
↓
TextBox1.Validated
↓
TextBox2.Enter
有的人习惯把处理写在LostFocus事件中。从这个图可以看出,妥当的写法应该是,把对数据的检查写在Validating事件中。 而通过检查之后的处理,写在Validated事件中。而且,在Validating事件中,可以中止焦点的转移。也就是说,如果数据 检查不合格,可以不让焦点转移,禁止用户继续填下一个项目,知道这个项目正确的被填入。
现在回到刚才的那个例子,具体实现代码如下所示:
PrivateSub TextBox1_Validating(ByVal senderAs Object, ByVal e As System.ComponentModel.CancelEventArgs)Handles TextBox1.Validating If Not IsDate(TextBox1.Text) Then
MsgBox("请输入有效日期。", MsgBoxStyle.Information)
e.Cancel = True
EndIf
EndSub
PrivateSub TextBox1_Validated(ByVal senderAs Object, ByVal e As System.EventArgs) Handles TextBox1.Validated
TextBox1.Text = CDate(TextBox1.Text).ToString("yyyy/MM/dd")
End Sub
这样,如果输入的数据不正确,将无转移到其他TextBox,也无法触发其他按钮。但是,如果有一些按钮,不管输入的数据是不是正确 都需要可以触发的话(比如取消按钮),只要设置那个按钮的CausesValidation属性为False即可。
这些只不过是一些很简单的东西,提供给和我一样的新手参考。
- .Net中TextBox对于焦点的控制
- .Net中TextBox获得焦点的方法
- .NET中对于输入法的控制
- ASP.NET(C#)中返回textbox焦点并全选所输入的内容
- DataGrid模板列中TextBox的焦点相应键盘事件
- DataGrid模板列中TextBox的焦点相应键盘事件
- 如何使页面中所有的textbox失去焦点
- DataGrid模板列中TextBox的焦点相应键盘事件
- DataGrid模板列中TextBox的焦点相应键盘事件
- 控制DataGrid中TextBox的宽度
- 控制DataGrid中TextBox的宽度
- 控制TextBox中光标的位置
- C#中控制TextBox的光标位置
- ASP.NET 判断TextBox获得焦点事件
- Asp.Net中TextBox获得焦点时,其文本全被选中。
- Asp.Net中TextBox获得焦点时,其文本全被选中。
- Android中RecyclerView的使用(焦点控制)
- ASP.NET 2.0中ReadOnly的TextBox
- Cocos2d-x使用SQLite
- Cocos2d-x SQLite使用错误
- win7下安装Ubuntu10.04
- Html之【超链接<A>】综合技巧大全(持续更新中..)
- Html之【文字格式标签】综合技巧大全(持续更新中...)
- .Net中TextBox对于焦点的控制
- SendKeys.Send()的使用
- 不用中间变量交换两个数的陷阱
- DP(1) --- 数塔
- 【数据结构】链表
- 蛇形填 数
- 使用Eclipse WTP工具部署Maven管理的Web应用
- 水仙花数
- 项目延期原因及应对之道