Произошло необработанное исключение типа «System.FormatException» в mscorlib.dll. Дополнительная информация: входная строка была в неправильном формате - PullRequest
0 голосов
/ 11 мая 2018
    int Sinhala, Maths, Science, History, Buddhism, English, Group1, Group2, Group3, Total, Average;

    private void btnCalculate_Click(object sender, EventArgs e)
    {
        Sinhala = int.Parse(txtSinhala.Text);
        Maths = int.Parse(txtMaths.Text); //Error is in this line
        Science = int.Parse(txtScience.Text);
        History = int.Parse(txtHistory.Text);
        Buddhism = int.Parse(txtBuddhism.Text);
        English = int.Parse(txtEnglish.Text);
        Group1 = int.Parse(txtGroup1.Text);
        Group2 = int.Parse(txtGroup2.Text);
        Group3 = int.Parse(txtGroup3.Text);

        Total = Sinhala + Maths + Science + History + Buddhism + English + Group1 + Group2 + Group3;

        txtTotal.Text = Total.ToString(); //Find Total

    }

} }

Не могу найти всего.

Произошло необработанное исключение типа 'System.FormatException' в mscorlib.dll.

Дополнительная информация: входная строка была в неправильном формате.

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

int.Parse (string s) метод преобразует строку в целое число.

Если строка s имеет значение null, будет выброшено исключение ArgumentNullException.

Если строка s отличается от целочисленного значения, то будет выдано исключение FormatException.

Если строка s представляет из целочисленных диапазонов, то она выдаст OverflowException.

Может быть, значение, которое вы передаете в текстовое поле, может иметь значение, отличное от целочисленного, поэтому его givin FormatException.

Попробуйте использовать: int.TryParse (TxtMaths.Text), он также не выдаст ошибку в вышеприведенном сценарии, он просто попытается проанализировать значение, если ему не удастся проанализировать, он вернет нулевое значение, а не исключение.

Для получения более подробной информации, пожалуйста, обратитесь по ссылке ниже: https://www.codeproject.com/Tips/845439/Difference-between-int-Parse-Convert-ToInt-and-int

0 голосов
/ 11 мая 2018

Это говорит о том, что один из ваших вызовов int.Parse имеет текст (предположительно из формы, из которой вы собираете), который не конвертируется как int.Трудно сказать больше, не видя входных данных.Лучше использовать int.TryParse, а затем проверить его успешность.

if( !int.TryParse(txtMaths.Text, out int Maths)) //Do something if this is an invalid input

Надеюсь, это поможет

РЕДАКТИРОВАТЬ: если текст не является "прямой" int, то вам может понадобитьсяприменить некоторые стили / поставщики форматирования: Разобрать с FormatProviders

...