if (
!((e.KeyChar >= (char)48 && e.KeyChar <= (char)57) || (e.KeyChar == (char)8) || (e.KeyChar == (char)45) || (e.KeyChar == (char)44)))
e.Handled = true
Запрет ввода данных
Код:
http://msdn.microsoft.com/ru-ru/library/system.windows.forms.control.keydown.aspx#Y200
если в нем настроить маску, то вводить можно будет только разрешенные маской символы. Вся логика уже там.
Если же этого не достаточно - то RegEx, класс для работы с regular extension.
Но все равно нужно проверять всю строку после ввода, а не во время (у каждого контрола есть эвент - к нему и можно проивязаться)
Если вам надо именно на вводе, и не MaskedTextBox, то во первых, не советую :-) (это же нестандартное поведение, пользователи будут зависать :-) ), во вторых - придется переменными уровня класса ("глобальными") пользоваться, чтобы количество уже введенных точек считать. Кривой код будет.
Забыл какой эвент для этого предназначен написать - this.textBox1.Validating
Код:
private void textBox1_Validating(object sender, CancelEventArgs e)
{
TextBox textToValidate = sender as TextBox;
if (textToValidate.Text != "")
{
textToValidate.BackColor = Color.Aquamarine;
e.Cancel = true;
}
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
TextBox textToValidate = sender as TextBox;
textToValidate.BackColor = Color.White ;
}
{
TextBox textToValidate = sender as TextBox;
if (textToValidate.Text != "")
{
textToValidate.BackColor = Color.Aquamarine;
e.Cancel = true;
}
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
TextBox textToValidate = sender as TextBox;
textToValidate.BackColor = Color.White ;
}
спасибо, сделал немного по-своему