using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Linq; using System.Text; using System.Windows.Forms; using System.Text.RegularExpressions; namespace WMS.Ctrl { public partial class WMSCtrlTextBox : DevExpress.XtraEditors.TextEdit { public WMSCtrlTextBox() { this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.textBox1_KeyDown); this.Leave += new System.EventHandler(this.textBox1_Leave); this.TextChanged += new EventHandler(WMSCtrlTextBox_TextChanged); this.Font = new System.Drawing.Font("宋体", 10); this.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.Flat; } public WMSCtrlTextBox(IContainer container) { container.Add(this); this.TextChanged += new EventHandler(WMSCtrlTextBox_TextChanged); this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.textBox1_KeyDown); this.Leave += new System.EventHandler(this.textBox1_Leave); } public void WMSCtrlTextBox_TextChanged(object sender, EventArgs e) { if (mustText) { if (this.Text.Trim().Length > 0) { this.BackColor = System.Drawing.SystemColors.Window; } else { this.BackColor = System.Drawing.Color.PeachPuff; } } } ValidationAttribute valatt; [Description("正则表达式")] [Browsable(true)] public ValidationAttribute Valatt { get { return valatt; } set { valatt = value; } } private bool mustText = false; private string _valText = string.Empty; [Description("默认值")] [Browsable(true)] public string ValText { get { return _valText; } set { _valText = value; } } [Description("是否为必填项")] [Browsable(true)] public bool MustText { get { return mustText; } set { mustText = value; if (mustText) { this.BackColor = System.Drawing.Color.PeachPuff; } else { this.BackColor = System.Drawing.SystemColors.Window; } } } //private void GetValResult() //{ // string msg = ""; // if (!Check(this.Text, ref msg)) // { // MessageBox.Show(valatt + "输入错误!"); // this.Text = ""; // this.Focus(); // } //} private bool frmSelect=false; [Description("是否是通用查询")] [Browsable(true)] public bool FrmSelect { get { return frmSelect; } set { frmSelect=value; } } #region 正则验证 string pattern; public bool Check(string str, ref string msg) { switch (valatt) { //case ValidationAttribute.无://无 // return true; // break; case ValidationAttribute.整数://整数 msg = "整数"; pattern = @"^-?[0-9]\d*$"; break; case ValidationAttribute.正整数://正整数 msg = "正整数"; pattern = "^[0-9]*[1-9][0-9]*$"; break; case ValidationAttribute.负整数://负整数 msg = "负整数"; pattern = "^-[0-9]*[1-9][0-9]*$"; break; case ValidationAttribute.数字://数字 msg = "数字"; pattern = "^([+-]?)\\d*\\.?\\d+$"; break; case ValidationAttribute.电话://电话 msg = "电话"; //在做项目时常常用到判断电话号码的正则表达式,写了一个,可验证如下27种格式: //110 //8888888 //88888888 //8888888-123 //88888888-23435 //0871-8888888-123 //023-88888888-23435 //86-0871-8888888-123 //8888888_123 //88888888_23435 //0871_8888888_123 //023_88888888_23435 //86_0871_8888888_123 //8888888-123 //88888888-23435 //0871-8888888-123 //023-88888888-23435 //86-0871-8888888-123 //8888888—123 //88888888—23435 //0871—8888888—123 //023—88888888—23435 //86—0871—8888888—123 //13588888888 //15988888888 //013588888888 //015988888888 //(0315)7663551 pattern = @"((^(\d{2,4}[-_-—]?)?\d{3,8}([-_-—]?\d{3,8})?([-_-—]?\d{1,7})?$)|(^0?1[35]\d{9}$)z)|(^(\([0-9]+\))?[0-9]{7,8}$)"; break; case ValidationAttribute.正数://正数(正整数+ 0) msg = "正数(正整数+ 0)"; pattern = @"^\d+$"; break; case ValidationAttribute.负数://负数(负整数+ 0) msg = "负数(负整数+ 0)"; pattern = @"^((-\d+)|(0+))$"; break; case ValidationAttribute.浮点数://浮点数 msg = "浮点数"; pattern = @"^(-?\d+)(\.\d+)?$"; break; case ValidationAttribute.正浮点数://正浮点数 msg = "正浮点数"; pattern = @"^(?:[1-9][0-9]*\.[0-9]+|0\.(?!0+$)[0-9]+)$"; break; case ValidationAttribute.负浮点数://负浮点数 msg = "负浮点数"; pattern = @"^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"; break; case ValidationAttribute.浮点数2://浮点数 msg = "浮点数"; pattern = @"(^\d+$)|(^(?:[1-9][0-9]*\.[0-9]+|0\.(?!0+$)[0-9]+)$)"; break; case ValidationAttribute.非负浮点数://非负浮点数(正浮点数+ 0) msg = "非负浮点数(正浮点数+ 0)"; pattern = @"^\d+(\.\d+)?$"; break; case ValidationAttribute.非正浮点数://非正浮点数(负浮点数+ 0) msg = "非正浮点数(负浮点数+ 0)"; pattern = @"^((-\d+(\.\d+)?)|(0+(\.0+)?))$"; break; case ValidationAttribute.邮件://邮件 //正确 msg = "邮件"; pattern = @"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$"; break; case ValidationAttribute.颜色://颜色 msg = "颜色"; pattern = "^[a-fA-F0-9]{6}$"; break; case ValidationAttribute.url://url(http格式的) msg = "url(http格式的)"; pattern = @"http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?"; break; case ValidationAttribute.中文://仅中文 msg = "中文"; pattern = @"[\u4e00-\u9fa5]"; break; case ValidationAttribute.ACSII字符://仅ACSII字符 msg = "ACSII字符"; pattern = "^[\\x00-\\xFF]+$"; break; case ValidationAttribute.邮编://邮编 msg = "邮编"; pattern = "^\\d{6}$"; break; case ValidationAttribute.手机://手机 msg = "手机"; pattern = "^[1]+[3,5]+\\d{9}"; break; case ValidationAttribute.IP地址://ip地址 msg = "IP地址"; pattern = @"^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$"; break; case ValidationAttribute.非空://非空 msg = "非空"; pattern = "^\\S+$"; break; case ValidationAttribute.图片://图片 msg = "图片"; pattern = @"(.*)\.(jpg|gif|png|bmp)$"; break; case ValidationAttribute.压缩文件://压缩文件 msg = "压缩文件"; pattern = "(.*)\\.(rar|zip|7zip|tgz)$"; break; case ValidationAttribute.日期://日期 msg = "日期"; //这个日期正则表达式支持 //YYYY-MM-DD //YYYY/MM/DD //YYYY_MM_DD //YYYY.MM.DD的形式 pattern = @"((^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(10|12|0?[13578])([-\/\._])(3[01]|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(11|0?[469])([-\/\._])(30|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(0?2)([-\/\._])(2[0-8]|1[0-9]|0?[1-9])$)|(^([2468][048]00)([-\/\._])(0?2)([-\/\._])(29)$)|(^([3579][26]00)([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][0][48])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][0][48])([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][2468][048])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][2468][048])([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][13579][26])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][13579][26])([-\/\._])(0?2)([-\/\._])(29)$))"; break; case ValidationAttribute.QQ号码://QQ号码 msg = "QQ号码"; pattern = "[1-9][0-9]{4,}"; break; case ValidationAttribute.正整数浮点://用来用户注册。匹配由数字、个英文字母或者下划线组成的字符串 msg = "正数(正整数+ 0)"; pattern = @"(^\d+$)|(^(?:[1-9][0-9]*\.[0-9]+|0\.(?!0+$)[0-9]+)$)"; break; case ValidationAttribute.字母://字母 msg = "字母"; pattern = "^[A-Za-z]+$"; break; case ValidationAttribute.大写字母://大写字母 msg = "大写字母"; pattern = "^[A-Z]+$"; break; case ValidationAttribute.小写字母://小写字母 msg = "小写字母"; pattern = "^[a-z]+$"; break; case ValidationAttribute.身份证://身份证 msg = "身份证"; //pattern = @"^[1-9]([0-9]{16}|[0-9]{13})[xX0-9]$"; pattern = "(^\\d{18}$)|(^\\d{15}$)"; break; default: pattern = string.Empty; break; } return Regex.IsMatch(str, pattern); } #endregion int strlen; [Description("设置文本长度")] [Browsable(true)] public int StrLen { get { return strlen; } set { strlen = value; } } public void textBox1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { if (GetValResult()) { SendKeys.Send("{TAB}"); } } } public void textBox1_Leave(object sender, EventArgs e) { GetValResult(); if (this.Text.Trim().Length == 0 && _valText =="0") { this.Text = _valText; } } private bool GetValResult() { if (StrLen != 0 && this.Text.Length > StrLen) { MessageBox.Show("文本长度不能大于" + StrLen.ToString() + "!"); this.Text = ""; this.Focus(); return false; } string msg = ""; if (this.Text.Trim() != "") { bool valBl=Check(this.Text, ref msg); if (!valBl) { MessageBox.Show(msg + "输入错误!"); this.Text = ""; this.Focus(); return false; } } if (mustText) { if (this.Text.Trim().Length > 0) { this.BackColor = System.Drawing.SystemColors.Window; } else { this.BackColor = System.Drawing.Color.AntiqueWhite; } } return true; } } public enum ValidationAttribute { 无, 整数, 正整数, 正整数浮点, 负整数, 数字, 电话, 正数, 负数, 浮点数, 正浮点数, 负浮点数, 浮点数2, 非负浮点数, 非正浮点数, 邮件, 颜色, url, 中文, ACSII字符, 邮编, 手机, IP地址, 非空, 图片, 压缩文件, 日期, QQ号码, 用户名 = 27, 字母, 大写字母, 小写字母, 身份证 } }