日期:2014-06-10  浏览次数:20540 次

 

【实例说明】


 可以在TextBox控件中轻松地输入文本信息,输入的文本信息可以包括字母、数字、汉字等。

 如果需要用户在TextBox控件中填写年龄信息,那么年龄信息应当只允许数字,怎么限制用户输入其他信息呢?

 本实例中将会演如何只允许用户在TextBox控件中输入数字,当按下其他非数字按钮时便会提示:
1.png

 

 这个例子很简单的,限制输入,直接在KeyPress事件里验证就行了。下面说了两种方式:


【关键技术】
 本实例重点在于向读者介绍怎样通过Char结构的isDigit方法判断用户在TextBox控件中输入的字符是否为数字,以及使用按键对应的Ascii值判断是否是指定范围的按键等等。下面对本实例用到的关键技术进行详细的讲解。

 TextBox控件的KeyPress事件包含两个参数,即sender事件源和包含事件数据的e,

 通过e的KeyChar属性可以获取用户按下键盘的按键,通过e的Handler属性可以设置是否处理过用户按键的事件。
 通过e.KeyChar转成int的值可以获取到当前用户按下键盘的按键对应的ASCII值。

 (1)KeyChar属性
   该属性用于获取或设置按下键对应的字符,语法格式如下:

1 public char KeyChar{ get; set; }

   参数说明
   属性值:Char结构,饿到按下键对应的字符。
 (2)Handled属性
   该属性用来获取或设置一个值,该值只是是否处理过System.Windows.Forms.Control.KeyPress事件,语法格式如下:

1 public bool Handled{ get; set; }

   参数说明
   属性值:布尔类型,只是是否处理过KeyPress事件。
   使用Char结构的isDigit方法可以判断指定字符是否为十进制数字,下面对其进行详细说明。
 (3)isDigit方法
   该方法只是某个字符是否属于十进制数字类别,语法格式如下:

1 public static bool IsDigit(char c)

   参数说明
   c:一个字符
   返回值:返回布尔值,如果字符c是是兼职数字则为true,否则为false。

说明:通过KeyPressEventArgs的Handled设置为true,可以取消KeyPress事件,这样可以取消用户在TextBox按键的值。

【设计过程】
 (1)打开Visual Studio,新建WinForm应用程序,命名为OnlyDigit。
 (2)更改默认窗体Form1的Name属性为FrmMain,向窗体中添加一个TextBox文本框控件,用于演示只允许向文本框中输入数字。
 (3)程序的主要代码如下:

1 // 在当前输入框中按下并弹起按键的事件
2 private void txt_Input_KeyPress(object sender, KeyPressEventArgs e)
3 {
4      if (!char.IsDigit(e.KeyChar))   // 如果当前输入的不是数字
5      {
6           MessageBox.Show("请输入数字!", "操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Information);   // 给出错误提示
7           e.Handled = true;   // 取消当前操作,即取消在控件中现实该字符的操作
8      }
9 }

 上面这段代码表示,使用char的IsDigit方法判断传进来的char字符是不是一个十进制的数字、

 当你运行这段代码会发现:我们按下非数字的字母或符号的时候,确实实现了这个效果、
 但是、当你按下回车、退格、Ctrl等等这些按键的时候、同样认为是非数字被拦截了、

 所以、这时就需要使用ASCII值判断数字范围了,因此,另一种写法:

 1 // 在当前输入框中按下并弹起按键的事件
 2 private void txt_Input_KeyPress(object sender, KeyPressEventArgs e)
 3 {
 4      int keyAsciiValue = Convert.ToInt32(e.KeyChar); // 获取当前按下的按键对应的ASCII值
 5 
 6      // 如果当前ASCII值范围不在48-57之间、也就是0-9对应的ASCII值之间
 7      // 或者ASCII的值不是8[退格键]或13[回车键]时
 8      if (!(((keyAsciiValue >= 48 && keyAsciiValue <= 57) || (keyAsciiValue == 8 || keyAsciiValue == 13))))
 9      {   //如果上面的验证结果是false
10           MessageBox.Show("请输入数字!", "操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Information);   // 给出错误提示
11           e.Handled = true;
12      }
13 
14      //if (!char.IsDigit(e.KeyChar))   // 如果当前输入的不是数字
15      //{
16       //    MessageBox.Show("请输入数字!", "操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Information);     // 给出错误提示
17       //    e.Handled = true;   // 取消当前操作,即取消在控件中现实该字符的操作
18      //}
19 }

 

 我这里不能插附件,要源码的话留言吧,呵呵。

 

 

 

【来自:[LonelyShadow 博客] http://www.cnblogs.com/LonelyShadow