让非法字符无法输入,在TEXTBOX中要写不少代码,能不能少写点。

解决方案 »

  1.   

    使用正则表达式 !!using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Drawing;
    using System.Data;
    using System.Windows.Forms;namespace prjCx
    {
    /// <summary>
    /// MaskTextBox 的摘要说明。
    /// </summary>
    public class MaskTextBox : System.Windows.Forms.TextBox
    { #region  系统定义内容 /// <summary> 
    /// 必需的设计器变量。
    /// </summary>
    private System.ComponentModel.Container components = null; public MaskTextBox():base()
    { //初始化正则表达式类
    this.regex = new System.Text.RegularExpressions.Regex(this.sRegExInner); //将TextChanged事件与自定义的该事件的处理方法进行关联 一般说,如果直接在TextChanged事件做,由于不断的对this.Text进行赋值操作,
    //则会不断的引起该事件  所以可以采取委托与其进行关联,当触发时,只进行了一次触发,而不是连续触发
    this.TextChanged += new EventHandler(this.fCheck); } /// <summary> 
    /// 清理所有正在使用的资源。
    /// </summary>
    protected override void Dispose( bool disposing )
    {
    if( disposing )
    {
    if(components != null)
    {
    components.Dispose();
    }
    }
    base.Dispose( disposing );
    } #endregion  系统定义内容 #region   自定义变量
    //设置正则表达式串,默认为 可以输入26个英文字母、数字、下划线等(在外部输入中,系统会自动处理"\"的问题,所以不用在加@)
    private string sRegExInner = @"^\d*$"; private System.Text.RegularExpressions.Regex regex; public string sRegEx 
    {
    get
    {
    return sRegExInner;
    }
    set
    {
    //在设置变量的时候声明正则表达式类;否则由于对象已生成,则正则表达式形式已固化在对象之中,则外部设置是没有任何意义的(已更改不了已生成对象的正则表达式形式)
    this.sRegExInner = value;
    regex = new System.Text.RegularExpressions.Regex(this.sRegExInner);
    }
    }
             
    //用于记录先前的TextBox中的值,当输入不合法的字符串时,要对其进行
    private string sOldValue =""; #endregion #region 自定义方法
    //进行校验
    private void fCheck(object sender,System.EventArgs e)
    {
    if(this.regex.Match(this.Text).Success)
    {
    this.sOldValue = this.Text;
    }
    else
    {
    //以下内容,涉及到对this.Text进行了两次赋值,一次赋值时,并没有当时就再引发TextChanged事件,第二次才引发 this.Text = this.sOldValue;
    //追加空串,目的是将光标移至最后
    this.AppendText("");
    }
    }//函数体结束 #endregion 自定义方法
    }//类定义结束
    }