WinForm的TextBox中只能數字與字母而不能輸入其他字符

          private   void   textBox1_KeyPress(object   sender,   System.Windows.Forms.KeyPressEventArgs   e)   
            {   
            if((e.KeyChar>='0'&&e.KeyChar<='9')||(e.KeyChar>='A'&&e.KeyChar<='Z')||(e.KeyChar>='a'&&e.KeyChar<='z'))   
            e.Handled=false;   
            else   
            e.Handled=true;   
            }

          有些情況下,在開發WinForm的時候希望TextBox中只能數字而不能輸入其他字符,其實還是比較容易做到的,可能方法很多,下面說說我個人的一種方法。

              首先先把代碼貼出來:

          1. private void txtNumber_KeyPress(object sender, KeyPressEventArgs e)
          2. {
          3. if (char.IsDigit(e.KeyChar)||((int)e.KeyChar)==8)//8為Backspac所對應的ascii
          4. {
          5. //表示:該事件尚未處理,事件會繼續處理
          6. e.Handled = false;
          7. }
          8. else
          9. {
          10. //表示:該事件已經處理過了,事件就不會在響應去處理了
          11. e.Handled = true;
          12. MessageBox.Show("請輸入數字!");
          13. }
          14. }

              然后再來解釋下:首先是創建一個對TextBox(txtNumber) 增加一個KeyPress事件響應,當每按完一個鍵盤鍵時將響應該事件。

                      然后再通過char.IsDigit來判斷鍵入的字符是否為數字,如果是,則設置e.Handled為false,即數字可以輸入到TextBox中,當然當按下Backspace時    要響應刪除事件,不然輸入錯了可刪除不了了哦!

          好吧,大概流程就是這樣了!


          private void textBox1_KeyPress(object sender, KeyPressEventArgs e)//文本框只接受數字的輸入和小數點 
          { 
          //IsNumber:指定字符串中位于指定位置的字符是否屬于數字類別 
          //IsPunctuation:指定字符串中位于指定位置的字符是否屬于標點符號類別 
          //IsControl:指定字符串中位于指定位置的字符是否屬于控制字符類別 
          if (!Char.IsNumber(e.KeyChar) && !Char.IsPunctuation(e.KeyChar) && !Char.IsControl(e.KeyChar)) 
          { 
          e.Handled = true; //獲取或設置一個值,指示是否處理過System.Windows.Forms.Control.KeyPress事件 
          } 
          else if (Char.IsPunctuation(e.KeyChar)) 
          { 
          if (e.KeyChar == '.') 
          { 
          if (((TextBox)sender).Text.LastIndexOf('.') != -1) 
          { 
          e.Handled = true; 
          } 
          } 
          else 
          { 
          e.Handled = true; 
          } 
          } 
          }

          首先,先定義一個string,用來表示數字的正則表達式:
           private string pattern = @"^[0-9]*$";

          然后再定義一個
          string,用來記錄TextBox原來的內容,以便在輸入非數字的時候,文本框的內容可以恢復到原來的值(我不知道TextBox怎么恢復到上一次的內容,只能采用這個笨辦法了):
          private string param1 = null;

          接著,我們就可以在textBox的TextChanged事件中判斷輸入的是否是數字,如果是數字,那么就把文本框的內容保存在param1中;如果不是數字,那么取消這次輸入,即重新設置文本框的內容為param1:
                  private void textBoxParam1_TextChanged(object sender, EventArgs e)
                  
          {
                      Match m 
          = Regex.Match(this.textBoxParam1.Text, pattern);   // 匹配正則表達式

                      
          if (!m.Success)   // 輸入的不是數字
                      {
                          
          this.textBoxParam1.Text = param1;   // textBox內容不變

                          
          // 將光標定位到文本框的最后
                          this.textBoxParam1.SelectionStart = this.textBoxParam1.Text.Length;
                      }

                      
          else   // 輸入的是數字
                      {
                          param1 
          = this.textBoxParam1.Text;   // 將現在textBox的值保存下來
                      }

                  }

          這樣,就基本上實現了用正則表達式限制TextBox的輸入數字了。
          其他的現在也是類似,只要設定比較的正則表達式的內容即可。

          posted on 2012-04-16 10:14 SkyDream 閱讀(3537) 評論(0)  編輯  收藏 所屬分類: C# WinForm

          <2012年4月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 绵竹市| 杂多县| 安溪县| 蛟河市| 凯里市| 蒲江县| 琼海市| 宝兴县| 彭州市| 九寨沟县| 清新县| 无棣县| 沁源县| 浠水县| 陈巴尔虎旗| 抚宁县| 水富县| 库伦旗| 陆良县| 永康市| 永靖县| 清苑县| 佛坪县| 吴江市| 建瓯市| 六盘水市| 张掖市| 永昌县| 特克斯县| 友谊县| 旌德县| 浠水县| 龙岩市| 新巴尔虎左旗| 紫金县| 南乐县| 靖宇县| 阳原县| 北碚区| 桦甸市| 建水县|