国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

只能對(duì)數(shù)值操作的TextBox

2019-11-18 12:01:34
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  當(dāng)界面上要用戶輸入只有數(shù)字的字符時(shí),默認(rèn)的Textbox是不能勝任的,網(wǎng)上有很多網(wǎng)友們提供了很多的做法,我總結(jié)了一下寫了一個(gè)在C#下的實(shí)現(xiàn),做到了如下的幾點(diǎn):
  1:只能輸入類似這樣的字符:-123456.789;1234.789;
  2:在輸入的字符串中不能存在兩個(gè)點(diǎn)符:12456.78//正確;12.456.78//不正確;
  3:假如表示負(fù)數(shù)可以在字符串的最前面加一個(gè)減號(hào)“-”,也只能加到弟一個(gè)字符的位置;
  4:可以用復(fù)制粘帖功能和菜單功能,但是只對(duì)能正確格式的字符串有效,比如:12.34可以,Abc不可以;
  5:只是得到一個(gè)字符串,還可以在這個(gè)基礎(chǔ)上再改進(jìn)自己所需的,經(jīng)如添加對(duì)十六進(jìn)制的支持等。
  代碼如下在.NET下用C#寫的:
  
  using System;
  using System.Windows.Forms;
  
  namespace NumTextBox
  {
  ///
  /// NumTextBox 的摘要說(shuō)明。
  ///

  public class TextBoxNumEx:System.Windows.Forms.TextBox
  {
  public const int WM_CONTEXTMENU = 0x007b;//右鍵菜單消息
  public const int WM_CHAR = 0x0102;    //輸入字符消息(鍵盤輸入的,輸入法輸入的似乎不是這個(gè)消息)
  public const int WM_CUT = 0x0300;    //程序發(fā)送此消息給一個(gè)編輯框或combobox來(lái)刪除當(dāng)前選擇的文本
  public const int WM_COPY = 0x0301;    //程序發(fā)送此消息給一個(gè)編輯框或combobox來(lái)復(fù)制當(dāng)前選擇的文本到剪貼板
  public const int WM_PASTE = 0x0302;   //程序發(fā)送此消息給editcontrol或combobox從剪貼板中得到數(shù)據(jù)
  public const int WM_CLEAR = 0x0303;   //程序發(fā)送此消息給editcontrol或combobox清除當(dāng)前選擇的內(nèi)容;
  public const int WM_UNDO = 0x0304;    //程序發(fā)送此消息給editcontrol或combobox撤消最后一次操作
  
  public TextBoxNumEx()
  {
  //
  // TODO: 在此處添加構(gòu)造函數(shù)邏輯
  //
  }
  PRotected override void WndProc(ref Message m)
  {
  switch(m.Msg)
  {
  case WM_CHAR:
  System.Console.WriteLine(m.WParam);
  bool isSign = ((int)m.WParam == 45);
  bool isNum = ((int)m.WParam >= 48) && ((int)m.WParam <= 57);
  bool isBack = (int)m.WParam == (int)Keys.Back;
  bool isDelete = (int)m.WParam == (int)Keys.Delete;//實(shí)際上這是一個(gè)"."鍵
  bool isCtr = ((int)m.WParam == 24) ((int)m.WParam == 22) ((int)m.WParam == 26) ((int)m.WParam == 3);
  
  if( isNum isBack isCtr)
  {
  base.WndProc (ref m);
  }
  if (isSign)
  {
  if (this.SelectionStart!=0)
  {
  break;
  }
  base.WndProc (ref m);
  break;
  }
  if (isDelete)
  {
  if (this.Text.IndexOf(".")<0)
  {
  base.WndProc (ref m);
  }
  }
  if ((int)m.WParam == 1)
  {
  this.SelectAll();
  }
  break;
  case WM_PASTE:
  IDataObject iData = Clipboard.GetDataObject();//取剪貼板對(duì)象
  
  if(iData.GetDataPresent(DataFormats.Text)) //判定是否是Text
  {
  string str = (string)iData.GetData(DataFormats.Text);//取數(shù)據(jù)
  if (MatchNumber(str))
  {
  base.WndProc (ref m);
  break;
  }
  }
  m.Result = (IntPtr)0;//不可以粘貼
  break;
  default:
  base.WndProc (ref m);
  break;
  }
  }
  private bool MatchNumber(string ClipboardText)
  {
  int index=0;
  string strNum = "-0.123456789";
  
  index = ClipboardText.IndexOf(strNum[0]);
  if (index>=0)
  {
  if (index>0)
  {
  return false;
  }
  index = this.SelectionStart;
  if (index>0)
  {
  return false;
  }
  }
  
  index = ClipboardText.IndexOf(strNum[2]);
  if (index!=-1)
  {
  index = this.Text.IndexOf(strNum[2]);
  if (index!=-1)
  {
  return false;
  }
  }
  
  for(int i=0; i  {
  index = strNum.IndexOf(ClipboardText[i]);
  if (index <0)
  {
  return false;
  }
  }
  return true;
  }
  }
  }

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 芦溪县| 屏边| 双峰县| 蚌埠市| 德化县| 拉萨市| 云梦县| 杭锦后旗| 监利县| 安阳县| 项城市| 墨江| 焦作市| 舟曲县| 大竹县| 德州市| 铁岭市| 贡嘎县| 奈曼旗| 通城县| 河东区| 赣州市| 堆龙德庆县| 建始县| 略阳县| 丰台区| 潞城市| 淮滨县| 龙门县| 澄江县| 合江县| 平乐县| 泸水县| 永泰县| 诸暨市| 江华| 乐陵市| 若尔盖县| 贞丰县| 鄯善县| 鄂伦春自治旗|