博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# TextBox控件重写 之NumTextBox
阅读量:5076 次
发布时间:2019-06-12

本文共 6156 字,大约阅读时间需要 20 分钟。

TextBox控件重写 之NumTextBox,主要实现的功能是,只允许输入数字,或String,Numeric,Currency,Decimal,Float,Double,Short,Int,Long

等加了一个属性InputType可以设置其,还可以自己进一步扩展,因为是开源的。

        public enum NumTextBoxType
        {


            String,//是这个的时候,什么都不处理,跟正常TextBox一样
            Numeric,//只要是数字就行
            Currency,
            Decimal,
            Float,
            Double,
            Short,
            Int,
            Long
        }

主要代码:

using System;  using System.Windows.Forms;  using System.ComponentModel;  using System.Text.RegularExpressions;    namespace YongFa365.Controls.NumTextBox  {      public class NumTextBox : TextBox      {          private NumTextBoxType inputType = NumTextBoxType.Numeric;          public enum NumTextBoxType          {              String,//是这个的时候,什么都不处理,跟正常TextBox一样              Numeric,//只要是数字就行              Currency,              Decimal,              Float,              Double,              Short,              Int,              Long          }            public NumTextBox()          {              this.ContextMenu = new ContextMenu();          }            [          Category("专用设置"),          DefaultValue(NumTextBoxType.Numeric),          Description("设置允许类型:\nString跟普通TextBox功能一样\nNumeric只要是数字就可以")          ]          public NumTextBoxType InputType          {              get { return inputType; }              set { inputType = value; }          }            public override string Text          {              get { return base.Text; }              set              {                  if (IsValid(value, true))                  {                      base.Text = value;                  }              }          }            private bool IsValid(string val, bool use)          {              bool ret = true;                if (string.IsNullOrEmpty(val))              {                  return ret;              }                if (use)              {                  if (val.Equals("-") && inputType != NumTextBoxType.Numeric)                  {                      return ret;                  }              }                  try              {                  switch (inputType)                  {                      case NumTextBoxType.String:                          break;                      case NumTextBoxType.Numeric:                          if (!Regex.IsMatch(val, @"^\d*$"))                          {                              ret = false;                          }                          break;                      case NumTextBoxType.Currency:                          decimal dec = decimal.Parse(val);                          int pos = val.IndexOf(".");                          if (pos != -1)                          {                              ret = val.Substring(pos).Length <= 3;                          }                          break;                      case NumTextBoxType.Float:                          float flt = float.Parse(val);                          break;                      case NumTextBoxType.Double:                          double dbl = double.Parse(val);                          break;                      case NumTextBoxType.Decimal:                          decimal dec2 = decimal.Parse(val);                          break;                      case NumTextBoxType.Short:                          short s = short.Parse(val);                          break;                      case NumTextBoxType.Int:                          int i = int.Parse(val);                          break;                      case NumTextBoxType.Long:                          long l = long.Parse(val);                          break;                      default:                          throw new ApplicationException();                  }              }              catch              {                  ret = false;              }              return ret;          }            protected override bool ProcessCmdKey(ref Message msg, Keys keyData)          {                if (keyData == (Keys)Shortcut.CtrlV || keyData == (Keys)Shortcut.ShiftIns)              {                  IDataObject iData = Clipboard.GetDataObject();                      string newText;                  newText = base.Text.Substring(0, base.SelectionStart)                      + (string)iData.GetData(DataFormats.Text)                      + base.Text.Substring(base.SelectionStart + base.SelectionLength);                    if (!IsValid(newText, true))                  {                      return true;                  }              }              return base.ProcessCmdKey(ref msg, keyData);          }            protected override void OnLeave(EventArgs e)          {              if (!(inputType == NumTextBoxType.Numeric || inputType == NumTextBoxType.String))              {                  if (base.Text != "")                  {                      if (!IsValid(base.Text, false))                      {                          base.Text = "";                      }                      else if (Double.Parse(base.Text) == 0)                      {                          base.Text = "0";                      }                  }                }              base.OnLeave(e);            }            protected override void OnKeyPress(KeyPressEventArgs e)          {              if (inputType != NumTextBoxType.String)              {                  char c = e.KeyChar;                  if (!Char.IsControl(c))                  {                      if (c.ToString() == " ")                      {                          e.Handled = true;                          return;                      }                        string newText = base.Text.Substring(0, base.SelectionStart)                          + c.ToString() + base.Text.Substring(base.SelectionStart + base.SelectionLength);                        if (!IsValid(newText, true))                      {                          e.Handled = true;                      }                  }              }              base.OnKeyPress(e);          }      }  }

 

演示及组件下载地址:

转载,修改自:


引用:


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------本文转载自:

 

转载于:https://www.cnblogs.com/qingtianhua/p/3723099.html

你可能感兴趣的文章
HDU 1212 Big Number(C++ 大数取模)(java 大数类运用)
查看>>
-bash: xx: command not found 在有yum源情况下处理
查看>>
[leetcode]Minimum Path Sum
查看>>
内存管理 浅析 内存管理/内存优化技巧
查看>>
hiho1079 线段树区间改动离散化
查看>>
【BZOJ 5222】[Lydsy2017省队十连测]怪题
查看>>
第二次作业
查看>>
【input】 失去焦点时 显示默认值 focus blur ★★★★★
查看>>
Java跟Javac,package与import
查看>>
day-12 python实现简单线性回归和多元线性回归算法
查看>>
Json格式的字符串转换为正常显示的日期格式
查看>>
[转]使用 Razor 进行递归操作
查看>>
[转]Android xxx is not translated in yyy, zzz 的解决方法
查看>>
docker入门
查看>>
Android系统--输入系统(十一)Reader线程_简单处理
查看>>
监督学习模型分类 生成模型vs判别模型 概率模型vs非概率模型 参数模型vs非参数模型...
查看>>
Mobiscroll脚本破解,去除Trial和注册时间限制【转】
查看>>
实验五 Java网络编程及安全
查看>>
32位与64位 兼容编程
查看>>
iframe父子页面通信
查看>>