1. 程式人生 > >c# 控制TextBox只能輸入小數(只能輸入一個小數點,小數點後只能輸入兩位,第一位不能是小數點)

c# 控制TextBox只能輸入小數(只能輸入一個小數點,小數點後只能輸入兩位,第一位不能是小數點)

這個有一些問題

先輸入整數部分後再把整數部分刪除,變相地讓小數點跑到第一位

在兩位小數的情況下如果選中兩位小數也無法更改

網友 ymwcwee 已更正 請大家參考他的程式碼 

<p><textarea cols="50" rows="15" name="code" class="c-sharp">/// &lt;summary&gt;

  1. privatevoid textBox1_KeyPress(object sender, KeyPressEventArgs e)  
  2. {  
  3.     if (char.IsNumber(e.KeyChar) || e.KeyChar == 
    '.' || e.KeyChar == (char)Keys.Back || e.KeyChar == (char)Keys.Delete)  
  4.     {  
  5.         e.Handled = false;          //讓操作生效   
  6.         int j = 0;                  //記錄小數點個數
  7.         int k = 0;                  //記錄小數位數
  8.         int dotloc = -1;            //記錄小數點位置
  9.         bool flag = false;          //如果有小數點就讓flag值為true
  10.         //
  11.         //去除首位是0的判斷,因為我們不知道使用者的意圖,或許ta下次要在小數點前面輸入數字。
  12.         /* 
  13.         if (textBox1.Text.Length == 0) 
  14.         { 
  15.             if (e.KeyChar == '.') 
  16.             { 
  17.                 e.Handled = true; 
  18.             } 
  19.         } 
  20.         */
  21.         //
  22.         for (int i = 0; i < textBox1.Text.Length; i++)  
  23.         {  
  24.             if (textBox1.Text[i] == '.')  
  25.             {  
  26.                 j++;  
  27.                 flag = true;  
  28.                 dotloc = i;  
  29.             }  
  30.             if (flag)  
  31.             {  
  32.                 if (char.IsNumber(textBox1.Text[i]) && e.KeyChar != (char)Keys.Back && e.KeyChar != (char)Keys.Delete)  
  33.                 {  
  34.                     k++;  
  35.                 }  
  36.             }  
  37.             if (j >= 1)  
  38.             {  
  39.                 if (e.KeyChar == '.')  
  40.                 {  
  41.                     if (textBox1.SelectedText.IndexOf('.') == -1)  
  42.                         e.Handled = true;             //輸入“.”,選取部分沒有“.”操作失效
  43.                 }  
  44.             }  
  45.             if (!flag)                  //此處控制沒有小數點時新增小數點是否滿足兩位小數的情況
  46.             {  
  47.                 if (e.KeyChar == '.')  
  48.                 {  
  49.                     if (textBox1.Text.Length - textBox1.SelectionStart - textBox1.SelectedText.Length > 2)        //the condition also can be instead of "textBox1.Text.Substring(textBox1.SelectionStart).Length-textBox1.SelectionLength>2" 
  50.                         e.Handled = true;  
  51.                 }  
  52.             }  
  53.             if (k == 2)  
  54.             {  
  55.                 if (textBox1.SelectionStart > textBox1.Text.IndexOf('.') && textBox1.SelectedText.Length == 0 && e.KeyChar!  
  56. =(char)Keys.Delete && e.KeyChar!=(char)Keys.Back)      //如果已經有兩位小數,游標在小數點右邊,
  57.                     e.Handled = true;  
  58.             }  
  59.         }  
  60.     }  
  61.     else
  62.     {  
  63.         e.Handled = true;  
  64.     }   
  65. }  

</textarea></p>