c# 控制TextBox只能輸入小數(只能輸入一個小數點,小數點後只能輸入兩位,第一位不能是小數點)
阿新 • • 發佈:2019-02-07
這個有一些問題
先輸入整數部分後再把整數部分刪除,變相地讓小數點跑到第一位
在兩位小數的情況下如果選中兩位小數也無法更改
網友 ymwcwee 已更正 請大家參考他的程式碼
<p><textarea cols="50" rows="15" name="code" class="c-sharp">/// <summary>
- privatevoid textBox1_KeyPress(object sender, KeyPressEventArgs e)
- {
- if (char.IsNumber(e.KeyChar) || e.KeyChar ==
- {
- e.Handled = false; //讓操作生效
- int j = 0; //記錄小數點個數
- int k = 0; //記錄小數位數
- int dotloc = -1; //記錄小數點位置
- bool flag = false; //如果有小數點就讓flag值為true
- //
- //去除首位是0的判斷,因為我們不知道使用者的意圖,或許ta下次要在小數點前面輸入數字。
- /*
- if (textBox1.Text.Length == 0)
- {
- if (e.KeyChar == '.')
- {
- e.Handled = true;
- }
- }
- */
- //
- for (int i = 0; i < textBox1.Text.Length; i++)
- {
- if (textBox1.Text[i] == '.')
- {
- j++;
- flag = true;
- dotloc = i;
- }
- if (flag)
- {
- if (char.IsNumber(textBox1.Text[i]) && e.KeyChar != (char)Keys.Back && e.KeyChar != (char)Keys.Delete)
- {
- k++;
- }
- }
- if (j >= 1)
- {
- if (e.KeyChar == '.')
- {
- if (textBox1.SelectedText.IndexOf('.') == -1)
- e.Handled = true; //輸入“.”,選取部分沒有“.”操作失效
- }
- }
- if (!flag) //此處控制沒有小數點時新增小數點是否滿足兩位小數的情況
- {
- if (e.KeyChar == '.')
- {
- 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"
- e.Handled = true;
- }
- }
- if (k == 2)
- {
- if (textBox1.SelectionStart > textBox1.Text.IndexOf('.') && textBox1.SelectedText.Length == 0 && e.KeyChar!
- =(char)Keys.Delete && e.KeyChar!=(char)Keys.Back) //如果已經有兩位小數,游標在小數點右邊,
- e.Handled = true;
- }
- }
- }
- else
- {
- e.Handled = true;
- }
- }
</textarea></p>