Как отметил Шейн Хоу в комментариях, вы получаете FormatException
, потому что событие TextChanged
запускает каждый раз, когда изменяется текст .
Если значение в YarnWeightTextBox.Text
равно "5"
, и вы удаляете "5"
, после чего запускается событие TextChanged
. Это означает, что вы передаете пустую строку ""
в Convert.ToSingle
. Пустая строка не преобразуется в float
, поэтому вы получите FormatException
. То же самое вы получите, если в эту TextBox
также добавите что-либо, кроме цифры.
Лучшим вариантом будет проверить, соответствует ли значение в YarnWeightTextBox.Text
значению float
вместоиспользуя Convert.ToFloat
.
private void YarnWeightTextBox_TextChanged(object sender, EventArgs e)
{
float val1 = 0.0F;
if (!float.TryParse(YarnWeightTextBox.Text, out val1))
{
// The value in YarnWeightTextBox.Text does not parse to a float. You could
// do something here to indicate to the user that they did not provide a correct
// value, or just return.
return;
}
// Calculate the yarn length and put it in the YarnLengthTextBox.Text like you're doing now.
}
В качестве альтернативы, если это Windows Forms
, вы можете взглянуть на элемент управления NumericUpDown
, который не позволит пользователям вводить недопустимые значения.