У вас очень простая, но понятная ошибка.
Для свойства Handled
в KeyPressEventArgs
должно быть установлено значение true, чтобы не допустить дальнейшей обработки ключа операционной системой.
https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.keypresseventargs?view=netframework-4.8
Другими словами, установите для этого параметра значение true, если вы хотите ПРЕДОТВРАТИТЬ ключ.
Поэтому измените свой код таким образом, чтобы РАЗРЕШИТЬ дальнейшую обработку, когда нажатая клавиша соответствует условиям.
Также посмотрите, как вводятся логические переменные, чтобы сделать код читабельным.
Приведенный ниже код позволяет
- A (- ), если это первый символ в текстовом поле
- Символ (.), если это не первый символ и если нет других точек
- Любые управляющие символы
- И любые цифры.
Удачи.
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
bool isControl = char.IsControl(e.KeyChar);
bool isDigit = char.IsDigit(e.KeyChar);
bool isDot = e.KeyChar == '.';
bool alreadyHasADot = (sender as TextBox).Text.IndexOf('.') != -1;
bool isHyphen = e.KeyChar == '-';
bool isFirstChar = (sender as TextBox).Text.Length == 0;
bool isAllowed =
isControl ||
isDigit ||
(isDot && !isFirstChar && !alreadyHasADot) ||
(isHyphen && isFirstChar);
if (!isAllowed)
{
e.Handled = true;
}
}