自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

.net控制技巧:c# textbox數(shù)字的輸入

開發(fā) 后端
在.net控制TextBox中只能輸入數(shù)字網(wǎng)友可能有很多種方法實現(xiàn),本文章主要介紹的是.net中c# textbox數(shù)字的輸入,希望能給大家一些幫助。

 大家知道,在C#中,TextBox控件有keypress、keyup、和keydown事件等對輸入字符來控制。下面簡單談下在.net中c# textbox數(shù)字輸入的實現(xiàn)以及代碼示例。

當界面上要用戶輸入只有數(shù)字的字符時,默認的c# textbox數(shù)字是不能勝任的,網(wǎng)上有很多網(wǎng)友們提供了很多的做法,我總結(jié)了一下寫了一個在C#下的實現(xiàn),做到了如下的幾點:

1:只能輸入類似這樣的字符:-123456.789;1234.789;

2:在輸入的字符串中不能存在兩個點符:12456.78//正確;12.456.78//不正確;

3:如果表示負數(shù)可以在字符串的最前面加一個減號“-”,也只能加到弟一個字符的位置;

4:可以用復(fù)制粘帖功能和菜單功能,但是只對能正確格式的字符串有效,比如:12.34可以,Abc不可以;

5:只是得到一個字符串,還可以在這個基礎(chǔ)上再改進自己所需的,經(jīng)如添加對十六進制的支持等。

代碼如下在.NET下用C#寫的:

  1. using System;  
  2. using System.Windows.Forms;  
  3.  
  4. namespace NumTextBox  
  5. {  
  6.  ///   
  7.  /// NumTextBox 的摘要說明。  
  8.  /// 
  9.  
  10.  public class TextBoxNumEx:System.Windows.Forms.TextBox  
  11.  {  
  12.   public const int WM_CONTEXTMENU = 0x007b;//右鍵菜單消息   
  13.   public const int WM_CHAR = 0x0102;       //輸入字符消息(鍵盤輸入的,輸入法輸入的好像不是這個消息)  
  14.   public const int WM_CUT = 0x0300;        //程序發(fā)送此消息給一個編輯框或combobox來刪除當前選擇的文本  
  15.   public const int WM_COPY = 0x0301;       //程序發(fā)送此消息給一個編輯框或combobox來復(fù)制當前選擇的文本到剪貼板  
  16.   public const int WM_PASTE = 0x0302;      //程序發(fā)送此消息給editcontrol或combobox從剪貼板中得到數(shù)據(jù)  
  17.   public const int WM_CLEAR = 0x0303;      //程序發(fā)送此消息給editcontrol或combobox清除當前選擇的內(nèi)容;  
  18.   public const int WM_UNDO = 0x0304;        //程序發(fā)送此消息給editcontrol或combobox撤消***一次操作  
  19.  
  20.   public TextBoxNumEx()  
  21.   {  
  22.    //  
  23.    // TODO: 在此處添加構(gòu)造函數(shù)邏輯  
  24.    //  
  25.   }  
  26.   protected override void WndProc(ref Message m)   
  27.   {   
  28.    switch(m.Msg)  
  29.    {   
  30.     case WM_CHAR:  
  31.      System.Console.WriteLine(m.WParam);  
  32.      bool isSign = ((int)m.WParam == 45);  
  33.      bool isNum = ((int)m.WParam >= 48) && ((int)m.WParam <= 57);  
  34.      bool isBack = (int)m.WParam == (int)Keys.Back;  
  35.      bool isDelete = (int)m.WParam == (int)Keys.Delete;//實際上這是一個"."鍵  
  36.      bool isCtr = ((int)m.WParam == 24) || ((int)m.WParam == 22) || ((int)m.WParam == 26) ||((int)m.WParam == 3);  
  37.  
  38.      if( isNum || isBack || isCtr)  
  39.      {  
  40.       base.WndProc (ref m);  
  41.      }  
  42.      if (isSign)  
  43.      {  
  44.       if (this.SelectionStart!=0)  
  45.       {  
  46.        break;  
  47.       }  
  48.       base.WndProc (ref m);  
  49.       break;  
  50.      }  
  51.      if (isDelete)  
  52.      {  
  53.       if (this.Text.IndexOf(".")<0)  
  54.       {  
  55.        base.WndProc (ref m);  
  56.       }  
  57.      }  
  58.      if ((int)m.WParam == 1)  
  59.      {  
  60.       this.SelectAll();  
  61.      }  
  62.      break;  
  63.     case WM_PASTE:  
  64.      IDataObject iData = Clipboard.GetDataObject();//取剪貼板對象  
  65.        
  66.      if(iData.GetDataPresent(DataFormats.Text)) //判斷是否是Text  
  67.      {  
  68.       string str = (string)iData.GetData(DataFormats.Text);//取數(shù)據(jù)  
  69.       if (MatchNumber(str))   
  70.       {  
  71.        base.WndProc (ref m);  
  72.        break;  
  73.       }  
  74.      }  
  75.      m.Result = (IntPtr)0;//不可以粘貼  
  76.      break;  
  77.     default:  
  78.      base.WndProc (ref m);  
  79.      break;  
  80.    }  
  81.   }  
  82.   private bool MatchNumber(string ClipboardText)  
  83.   {  
  84.    int index=0;  
  85.    string strNum = "-0.123456789";  
  86.    index = ClipboardText.IndexOf(strNum[0]);  
  87.    if (index>=0)  
  88.    {  
  89.     if (index>0)  
  90.     {  
  91.      return false;  
  92.     }  
  93.     index = this.SelectionStart;  
  94.     if (index>0)  
  95.     {  
  96.      return false;  
  97.     }  
  98.    }  
  99.  
  100.    index = ClipboardText.IndexOf(strNum[2]);  
  101.    if (index!=-1)  
  102.    {  
  103.     index = this.Text.IndexOf(strNum[2]);  
  104.     if (index!=-1)  
  105.     {  
  106.      return false;  
  107.     }  
  108.    }  
  109.  
  110.    for(int i=0; i
  111.    {  
  112.     index = strNum.IndexOf(ClipboardText[i]);  
  113.     if (index <0)  
  114.     {  
  115.      return false;  
  116.     }  
  117.    }  
  118.    return true;  
  119.   }  
  120.  }  

本文來自:編程論壇   作者:佚名

【編輯推薦】

  1. C#HTTP文件傳輸?shù)膶崿F(xiàn)淺析
  2. 編程語言排行榜:C語言當選08年年度編程語言
  3. C++標準委員會確定將concepts特性從C++0x中移除
  4. C#3.0新特性的介紹(自動屬性)
  5. C#interface定義及使用淺析
責任編輯:林琳 來源: 編程論壇
相關(guān)推薦

2009-09-08 22:53:39

c# textbox數(shù)

2009-09-10 10:22:05

C# TextBox

2009-09-09 22:31:21

c# textbox失

2009-09-09 13:31:15

C# TextBox

2009-09-02 17:29:10

C# TextBox換

2009-09-10 09:10:17

C# TextBox換

2009-09-09 13:18:10

C# TextBox滾C# TextBox

2009-09-09 21:56:29

2009-09-09 11:29:32

C# TextBox事

2009-08-31 16:29:21

C#控制輸入法

2009-09-09 12:55:59

C# TextBox事

2009-09-10 09:42:53

C# TextBox

2009-10-26 09:50:11

C#與VB.NET

2009-09-08 23:35:12

c# textbox失

2009-08-27 16:54:59

C#開發(fā)技巧

2020-07-15 14:51:39

代碼C+開發(fā)

2009-08-11 15:44:05

C#基本技巧

2009-08-12 14:01:17

C# Excel編程技

2009-08-26 15:10:34

脫離.net fram

2009-08-26 15:25:06

.NET Framew
點贊
收藏

51CTO技術(shù)棧公眾號