Обработка исключений C#

161
02 февраля 2020, 10:30

Решил написать калькулятор на C#, нужно форматировать строку в TextBox в int, при этом обработать исключение при вводе алфавита.Но при этом всё равно выводится ошибка, извиняюсь если глупый вопрос, гуглил, ответа не нашел

private void textBox1_TextChanged(object sender, EventArgs e)
        {
            int NamberA = int.Parse (textBox1.Text);
            try
            {
                NamberA = Convert.ToInt32(textBox1.Text);
            }
            catch(FormatException)
            {
                MessageBox.Show("Вы ввели буквы, будьте впредь аккуратны");
            }
        }

Answer 1

У вас ошибка в том, что у вас метод int.Parse находится вне блока try/catch. Чтобы правильно обработать исключение, нужно метод, выбрасывающий исключение, поместить в try-часть. У вас почему-то два раза осуществляется преобразование строки в число двумя разными способами. Поэтому один из них нужно убрать. Пусть останется int.Parse:

private void textBox1_TextChanged(object sender, EventArgs e)
{
    int NamberA;
    try
    {
        NamberA = int.Parse(textBox1.Text);
    }
    catch(FormatException)
    {
        MessageBox.Show("Вы ввели буквы, будьте впредь аккуратны");
    }
}

P.S. Вообще, для калькулятора я бы поступил немного по-другому. Вместо события TextChanged я бы обрабатывал событие KeyPress. И сделал бы такой обработчик для textBox:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    e.Handled = !char.IsDigit(e.KeyChar);
}

В этом случае в textBox вообще нельзя ввести ничего, кроме цифр.

Answer 2

В вашем случае, также можно воспользоваться методом TryParse()

private void textBox1_TextChanged(object sender, EventArgs e)
        {
            int NumberA;
            if(!int.TryParse(textBox1.Text, out NumberA))
            {
                MessageBox.Show("Вы ввели буквы, будьте впредь аккуратны");
            }   
        }    

TryParse возвращает true, если получилось преобразовать строку в число и кладёт в NumberA это число и возвращает false, если преобразование не произошло.

READ ALSO
Составление сложного SQL запроса

Составление сложного SQL запроса

Использую ms sqlПроект asp

140
Unity3d: персонаж перестает двигаться после непродолжительного бездействия (AFK)

Unity3d: персонаж перестает двигаться после непродолжительного бездействия (AFK)

Персонаж перестает двигаться после непродолжительного бездействия (AFK)Всегда через какое-то время (около 3 минут) бездействия в игре, т

150
Entity Framework, добавить динамически новую таблицу

Entity Framework, добавить динамически новую таблицу

Имеется задача где необходимо во время выполнения создавать новую таблицу по запросу юзераТаблицу заранее предсказать нельзя, т

137
“Русская папка” пользователя

“Русская папка” пользователя

следующая строчка кода возвращает путь, который содержит "кириллицу"

136