jonie, так и задумано. И минусов тоже можно много ввести, и не только в начале числа. Так на самом деле удобней, когда нужно ошибку исправить, запятую например не в той позиции: вначале ставим где надо, потом удаляем где не надо. А ещё там Ctrl+C/Ctrl+V не работают. А мышкой можно вставить что угодно. И вот это плохо. А лучше не блокировать ввод вообще. Использовать ErrorProvider для индикации ошибок, а окончательную проверку правильности проводить отдельно, перед обработкой. Хотя я бы всё равно делал замену точек и запятых на системный разделитель в KeyPress.
| Код | private void textBox1_TextChanged(object sender, EventArgs e) { char ds = System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator[0]; errorProvider1.SetError((sender as TextBox), Regex.IsMatch((sender as TextBox).Text, @"^[+-]?\d*(\d"+ds+@")?\d*$") ? "" : "Можно вводить только числа"); } private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { if (Regex.IsMatch(e.KeyChar.ToString(), "[.,]")) e.KeyChar = System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator[0]; } private void button1_Click(object sender, EventArgs e) { double res; if (double.TryParse(textBox1.Text, out res)) MessageBox.Show(res.ToString()); } |
|