当前位置: 首页 > news >正文

C#中Validating和Validated事件

您可能经常需要检查用户输入到 Windows 窗体中的信息是否有效。例如,如果您有一个电话号码的 TextBox 控件,则可以检查该控件是否只包含适当的字符(数字、括号和连字符等等)。通常,可使用正则表达式验证用户输入的数据。

了解Validating之前,我们还需要了解焦点事件的顺序:

焦点事件按下列顺序发生:

Enter   //进入控件时发生
GotFocus   //在控件接收焦点时发生
Leave   //输入焦点离开控件时发生
Validating   //控件数据效验时发生
Validated  //数据效验完成后发生
LostFocus  //失去焦点时发生
如果 CausesValidation 属性设置为 false,则将取消 Validating 和 Validated 事件。

注:GotFocus 和 LostFocus 事件是关联于 WM_KILLFOCUS 和 WM_SETFOCUS Windows 消息的低级别焦点事件。应对所有控件使用 Enter 和 Leave 事件。

如果在 Validating 事件委托中,CancelEventArgs 对象的 Cancel 属性设置为 true,则正常情况下将在 Validating 事件之后发生的所有事件均被取消。

在操作中验证

要验证控件的内容,可以编写代码来处理 Validating 事件。在事件处理程序中,测试特定的条件(例如上面的电话号码)。验证是在处理时发生的一系列事件之一。

如果测试失败,则 Validating 事件的 CancelEventArgs 的 Cancel 属性将设置为 True。这将取消 Validating 事件,并导致焦点返回到控件(juky_huang注:这样会出现一个死循环,除非数据效验通过,可以使用下面强制方法来关闭)。实际的结果是,除非数据有效,否则用户将无法退出该控件。

关闭窗体和重写验证

当数据无效时,维护焦点的控件的副作用是,使用关闭窗体的任何常规方法都将无法关闭父窗体:

单击“关闭”框
通过右击标题栏显示的“系统”菜单
以编程方式调用 Close 方法
不过,在某些情况下,无论控件中的值是否有效,您都希望用户可以关闭窗体。您可以重写验证,并通过创建窗体的 Closing 事件的处理程序来关闭仍包含无效数据的窗体。在该事件中,将 Cancel 属性设置为 False。这将强制关闭该窗体。

注意   如果使用此方法强制关闭窗体,控件中尚未保存的任何信息都将丢失。

注意   模式窗体在关闭时不会验证控件内容。您仍可以使用控件验证将焦点锁定到控件,但不必考虑关闭窗体的行为。

转载于:https://www.cnblogs.com/xgw2004058/archive/2010/06/08/1753910.html

相关文章:

  • CentOS7关闭防火墙
  • 被晒的文章
  • Gartner:网络信息安全投入依然不在中国政企客户优先投入之列
  • git服务器的建立——Git折腾小记
  • 如何安装VMwareTools
  • linux下的超级终端Minicom
  • 数论初步
  • 吃6大排毒蔬菜 让你年轻10岁
  • modelsim使用常见问题及解决办法集锦 ②
  • stm32 串口发送字符串丢失第一个字节
  • 试安装 VS2010
  • 14-hadoop-运行的2种方式
  • 临时表和变量表的区别
  • Flink – submitJob
  • 经典SQL语句大全(2)
  • JavaScript-如何实现克隆(clone)函数
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • [NodeJS] 关于Buffer
  • 【前端学习】-粗谈选择器
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • 2019.2.20 c++ 知识梳理
  • 2019年如何成为全栈工程师?
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • C++11: atomic 头文件
  • django开发-定时任务的使用
  • isset在php5.6-和php7.0+的一些差异
  • mysql innodb 索引使用指南
  • node和express搭建代理服务器(源码)
  • PermissionScope Swift4 兼容问题
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 复杂数据处理
  • 理清楚Vue的结构
  • 判断客户端类型,Android,iOS,PC
  • 前端_面试
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 小程序01:wepy框架整合iview webapp UI
  • 用jQuery怎么做到前后端分离
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • PostgreSQL之连接数修改
  • 阿里云API、SDK和CLI应用实践方案
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #《AI中文版》V3 第 1 章 概述
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • (4)Elastix图像配准:3D图像
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (ros//EnvironmentVariables)ros环境变量
  • (独孤九剑)--文件系统
  • (一)appium-desktop定位元素原理
  • (转)【Hibernate总结系列】使用举例