转自https://www.cnblogs.com/rosesmall/p/8512863.html

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

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

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

  1. Enter   //进入控件时发生
  2. GotFocus   //在控件接收焦点时发生
  3. Leave   //输入焦点离开控件时发生
  4. Validating   //控件数据效验时发生
  5. Validated  //数据效验完成后发生
  6. 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。这将强制关闭该窗体。

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

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

public bool ValidEmailAddress(string emailAddress, out string errorMessage)
{//首先判断是否为空,然后判断是否有@,.符号if (emailAddress.Length == 0){errorMessage = "e-mail address is required.";return false;}//是否包含@if (emailAddress.IndexOf("@") > -1){//从@往后面开始搜索,找到.的位置,如果位置大于@的位置说明格式正确if (emailAddress.IndexOf(".", emailAddress.IndexOf("@")) > emailAddress.IndexOf("@")){errorMessage = "";return true;}} errorMessage = "e-mail address must be valid e-mail address format./n" + "For example 'someone@example.com'";return false;
} private void textBox4_Validating(object sender, CancelEventArgs e)
{//email地址string errorMsg;bool flag = ValidEmailAddress(((TextBox)sender).Text, out errorMsg); if (!flag){e.Cancel = true;this.textBox1.Select(0, this.textBox4.Text.Length);this.errorProvider1.SetError(this.textBox4, errorMsg);}
}private void textBox4_Validated(object sender, EventArgs e)
{errorProvider1.SetError(this.textBox4, "");
}

C#中Validating事件与关闭窗口相关推荐

  1. CentOS7中后台运行Node-RED(关闭窗口也能访问服务)

    场景 CentOS7中通过npm的方式安装Node-RED: CentOS7中通过npm的方式安装Node-RED - 霸道流氓 - 博客园 CentOS7中通过npm的方式安装Node-RED_BA ...

  2. 屏蔽基于对话框的MFC程序中按下ESC关闭窗口的功能

    在基于对话框的MFC程序中,如果你按下ESC,将会关闭对话框.如何屏蔽这个键呢,其实很简单,只要重载下PreTranslateMessage()即可. 方法:在对话框类上右击,选择"Add ...

  3. 第12章[12.4] 鼠标移入移除时弹出和关闭窗口

    需要实现功能的规格描述 鼠标进入某个区域时自动弹出一个新窗口,在该新窗口中可以做一些选择等功能 但鼠标离开新窗口时,自动关闭该新窗口. 类似菁优网在组卷时选取教材版本和年级的功能,页面如下: 框架实现 ...

  4. 微信内置浏览器点击“返回”关闭窗口

    场景:开发微信内的H5活动,需要进行微信授权,我们采用的是在一个静态页面(只有js,所以是个空白页面)内进行授权,授权后再跳转到活动主页. 客户需求:从活动主页返回时不显示这个授权页面(空白页面),直 ...

  5. Vim q-quit - 用 q 键关闭窗口

    我的第一个比较完整的 Vim 插件 q-quit 发布啦.地址 https://github.com/HustLion/q-quit q-quit 主要功能是用 q 键关闭窗口.免于每次关闭窗口都要 ...

  6. python 关闭窗口事件_关于python:如何在Tkinter中处理窗口关闭事件?

    如何在Python Tkinter程序中处理窗口关闭事件(用户单击" X"按钮)? Tkinter支持一种称为协议处理程序的机制.在这里,术语协议是指应用程序和窗口管理器之间的交互 ...

  7. 监听关闭页面事件 ajax,Vue 实现监听窗口关闭事件,并在窗口关闭前发送请求

    网上很多博客说监听窗口关闭事件使用window.beforeunload,但是这个监听事件也会在页面刷新的时候执行,经过百度和自己的实际测试, 终于解决了这个问题,代码如下: mounted() { ...

  8. 关于js关闭窗口的事件和用法

    原文地址为: 关于js关闭窗口的事件和用法 Onunload与Onbeforeunload Onunload,onbeforeunload都是在刷新或关闭时调用,可以在<script>脚本 ...

  9. html5 关闭窗口事件,web窗口关闭事件之onunload、onbeforeunload事件详解

    最近用到一个问题,当修改一篇内容时需要把此内容锁定,提交修改后解除锁定.那么问题出现了,当用户点了修改但未提交直接关掉窗口,那么此条信息一直处理锁定状态导致其他人员没办法修改. 在这里用到的是 onb ...

最新文章

  1. LINUX应用与发展简介
  2. 数据中心可以不设置柴发吗?
  3. 尚硅谷公开课--struts2--2--搭建struts2环境以及struts2简单例子
  4. docker 和挂载文件一起打包成新镜像_Docker文件系统和数据卷
  5. 【Cocos2d-Js实战教学(1)横版摇杆八方向移动】
  6. 解析Json的格式.
  7. new thread后会阻塞主程序吗_阻塞模型将会使线程休眠,为什么 Java 线程状态却是 RUNNABLE?...
  8. 机房收费系统合作版(五)——初识托付
  9. Centos6.4系统局域网服务之DHCP
  10. MFC DoDataExchange()绑定技术
  11. Oracle宣布JDK 6死缓:计划赶不上变化
  12. 《Android Studio开发实战 从零基础到App上线》出版后记
  13. 小程序搜索框搜索、查询(模糊搜索、关键字查询)
  14. 尤雨溪: 2022 Web 前端生态趋势
  15. Html中a标签用法总结:创建email,电话,描点链接等。以及防止链接被搜索引擎收录
  16. 计算机网络交换机无法ping,无法Ping通路由器交换机提示request time out修复方法
  17. Vue项目中的Emitted value instead of an instance of Error问题
  18. ADC采样使用钳位电路分压来采比电压高的电路
  19. 线性代数1:向量、线性组合、张成的空间和基
  20. 入手评测 暗影骑士龙和暗影骑士擎哪个更值得入手

热门文章

  1. pip sqlalchemy mysql_使用SQLAlchemy
  2. 解决android开发在大屏手机图片出现内存溢出
  3. C语言指针学习(1)
  4. 计算机添加页面,电脑中怎样给Word2010页面添加编辑限制保护【图文教程】
  5. 中国绿色+:鸥羊修修复土壤支持TEAx正茶链盟——链智星云
  6. java 定义数组属性_Java数组的定义与使用
  7. 新浪微博 图片上传接口
  8. 云计算(Gitlab+jenkins+maven)
  9. python实现之数据血缘关系,by networkx
  10. 10年Java开发经验,教你解决线上频出MySQL死锁问题!实战解析