В вопросе недостаточно подробностей, но мое внутреннее чувство подсказывает мне, что это проблема:
У вас есть содержимое в текстовом поле, например 40,5 , но компьютеры текущиекультура имеет десятичный разделитель, установленный на . (точка) .Следовательно, вы получаете исключение при преобразовании 40,5 в десятичное число, поскольку оно не понимает:
Может быть наоборот, и вы пишете 40,5, но ожидаете получить 40,5.
РЕДАКТИРОВАТЬ
Я видел комментарий к ответу Флориан фон Спичак , и кажется, что в текстовых полях присутствует символ $.Если это так, то это, очевидно, проблема.
Попробуйте заменить все textBox.Text
внутри вызовов Convert.ToDecimal
на textBox.Text.Replace("$","")
.Это должно избавить от $ и заставить его правильно проанализировать.
Таким образом, полный код должен быть таким:
decimal num1, num2, num3, total;
num1 = Convert.ToDecimal(SSubTotalTextBox.Text.Replace("$",""));
num2 = Convert.ToDecimal(SubTotalMTextBox.Text.Replace("$",""));
num3 = Convert.ToDecimal(SubTotalTextBox3.Text.Replace("$",""));
total = num1 + num2 + num3;
TotalAmountTextBox.Text = "$ "+ total;
Кроме того, вы должны заменить Convert.ToDecimal
на decimal.Parse
или decimal.TryParse
и добавьте некоторую логику проверки того, что на самом деле написано в ваших текстовых полях.