文本框中只允许小数点后两位数字?

我有一个文本框,用户输入一个数字,但我怎么能这样做,如果他们输入’。’ 之后它只允许2位小数?

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.') { e.Handled = true; } // only allow one decimal point if (e.KeyChar == '.' && (sender as TextBox).Text.IndexOf('.') > -1) { e.Handled = true; } } 

只需添加:

 if (Regex.IsMatch(textBox1.Text, @"\.\d\d")) { e.Handled = true; } 

到你的function结束

只是想指出,一旦满足该标准,接受的答案将不允许您在小数点之前输入任何数字。

其他当前示例都不会起作用,因为它们没有获得光标位置

如果您仍想使用按键事件,可以按如下方式重新计算代码:

 string senderText = (sender as TextBox).Text; string senderName = (sender as TextBox).Name; string[] splitByDecimal = senderText.Split('.'); int cursorPosition = (sender as TextBox).SelectionStart; if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && (e.KeyChar != '.')) { e.Handled = true; } if (e.KeyChar == '.' && senderText.IndexOf('.') > -1 ) { e.Handled = true; } if (!char.IsControl(e.KeyChar) && senderText.IndexOf('.') < cursorPosition && splitByDecimal.Length > 1 && splitByDecimal[1].Length == 2) { e.Handled = true; } 

或者,使用TextChanged事件并执行以下操作,它将起作用:

 string enteredText = (sender as TextBox).Text; int cursorPosition = (sender as TextBox).SelectionStart; string[] splitByDecimal = enteredText.Split('.'); if(splitByDecimal.Length > 1 && splitByDecimal[1].Length > 2){ (sender as TextBox).Text = enteredText.Remove(enteredText.Length-1); (sender as TextBox).SelectionStart = cursorPosition - 1; } 
 string word=txtPrice.Text.Trim(); string[] wordArr=word.Split('.'); if(wordArr.Length>1) { string afterDot=wordArr[1]; if(afterDot.Length>2) { alert("Only 2 allowed"); txtPrice.Text=wordArr[0]+"."+afterDot.SubString(0,2); } } 
 namespace WindowsFormsApplication10 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { label1.Text = ""; double no; no = double.Parse(textBox1.Text); string[] ones = new string[19] {"one ","two ","three ","four ","five ","six ","seven ","eight ","nine ","ten ","eleven ","twele ", "thiten ","fourten ","fiften ","sixten ","seventeen ","eighteen ", "ninteen "}; string[] tens = new string[9] { "ten ", "twenty ", "thirty ", "fourty ", "fifty ", "sixty ", "seventy ", "eighty ", "ninty " }; int i=0; if (no > 999 & no < 100000) { i = (int)no / 1000; if (i < 20) label1.Text = label1.Text + ones[i - 1] + ""; else if (i > 20) { int r = 0; r = i % 10; i = i / 10; label1.Text = label1.Text + tens[i - 1] + ""; label1.Text = label1.Text + ones[r - 1] + ""; } label1.Text = label1.Text + "thousand "; no = no % 1000; } if (no > 99 & no < 1000) { i = (int)no / 100; label1.Text = label1.Text + ones[i - 1] + "hundred "; no = no % 100; } if (no > 19 & no < 99) { i = (int)no / 10; label1.Text = label1.Text + tens[i - 1]; no = no % 10; } if (no > 0 & no < 20) { label1.Text = label1.Text + ones[(int)no-1] + " "; } label1.Text = label1.Text + "Rupees "; } private void button2_Click(object sender, EventArgs e) { textBox1.Text = ""; label1.Text = ""; textBox1.Focus(); } private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.') { e.Handled = true; } // only allow one decimal point if (e.KeyChar == '.' && (sender as TextBox).Text.IndexOf('.') > -1) { e.Handled = true; } string word = textBox1.Text.Trim(); string[] wordArr = word.Split('.'); if (wordArr.Length > 1) { string afterDot = wordArr[1]; if (afterDot.Length > 1) { e.Handled = true; } } } } } 

这是你需要的程序。

我相信MaskedTextBox类可以帮到你。

更多信息: https : //msdn.microsoft.com/en-us/library/system.windows.forms.maskedtextbox(v=vs.110).aspx

如果它不适合您的情况,您可以随时为自己编写validation和/或自定义控件。

这是一个数字文本框的示例: http : //msdn.microsoft.com/en-us/library/ms229644( v = vs。80) 。aspx#Y0

要解决上面的Casperah评论,您可以更改条件以处理控制字符,并允许编辑选择文本。

 if (!char.IsControl(e.KeyChar) && Regex.IsMatch(textBox1.Text, @"\.\d\d") && String.IsNullOrWhiteSpace(textBox1.SelectedText)) { e.Handled = true; }