Входная строка имела неверный формат в Int32.Parse

130
06 февраля 2021, 05:20

Столкнулся со странной ошибкой. Есть кнопка button, и событие Click для неё. В обработчике события Click мы делаем следующее:

static Button ok = new Button();
static TextBox tb = new TextBox();
private void button3_Click(object sender, EventArgs e)
{
    tb.Width = 60;
    tb.Height = 20;
    tb.Location = new Point(214, 115);
    Controls.Add(tb);  //добавляем TextBox на форму
    ok.Width = 60;
    ok.Height = 20;
    ok.Location = new Point(214, 135);
    ok.Text = "OK";
    ok.Click += click;  //событие Click для кнопки
    Controls.Add(ok);  //добавляем кнопку
}

Ну тут мы просто добавляем на форму TextBox и кнопку. А дальше в click мы делаем следующее:

int result;
if (Int32.Parse(tb.Text) != 9)  //входная строка имела неверный формат 
    result = Int32.Parse(tb.Text) - 1;
else
    result = 0;
//мой код, полный тайн и загадок (tb тут я не трогаю)
Controls.Remove(ok);
tb.Text = "";
Controls.Remove(tb);

Но на 2 строке ошибка "Входная строка имела неверный формат. Причём, эта ошибка вылетает в случайный момент, когда я повторяю эти действия (нажимаю на button, ввожу число, нажимаю на ok). Что делаю не так?

Answer 1

По нажатию на button3_Click вы добавляете назад на форму тот же текстбокс tb и ту же кнопку ok. И каждый раз дополнительно подписываетесь на ok.Click. Каждая дополнительная подписка вызывает еще одно срабатывание обработчика при нажатии.

В первый раз ваш код click вызывается один раз. Выполняется

click
    Int32.Parse(tb.Text)
    tb.Text = "";

Второй раз клик на кнопку вызывает метод click два раза подряд (т.к. код код button3_Click вызвался дважды, и строка ok.Click += click выполнилась дважды)

click
    Int32.Parse(tb.Text)
    tb.Text = "";
click
    Int32.Parse(tb.Text) <-- падает
    tb.Text = "";

Фикс - не использовать повторно объекты ok / tb, а создавать новый текстбокс и новую кнопку при каждом нажатии на button3:

static Button ok;
static TextBox tb;
private void button3_Click(object sender, EventArgs e)
{
    ok = new Button();
    tb = new TextBox();
    tb.Width = 60;
    tb.Height = 20;
    tb.Location = new Point(214, 115);
    Controls.Add(tb);  //добавляем TextBox на форму
    ok.Width = 60;
    ok.Height = 20;
    ok.Location = new Point(214, 135);
    ok.Text = "OK";
    ok.Click += click;  //событие Click для кнопки
    Controls.Add(ok);  //добавляем кнопку
}
READ ALSO
Создать XML для Excel с помощью LINQ to XML

Создать XML для Excel с помощью LINQ to XML

Пытаюсь построить XML для Excel такого вида:

118
не отображается библиотека к проекту C#

не отображается библиотека к проекту C#

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

91
Вытащить данные из TXT в datagridview. C#

Вытащить данные из TXT в datagridview. C#

Есть такой файл TXT (картинка ниже)Мне нужно как то сделать так, чтобы в базу DATAGRIDVIEW записывалась строка, у которой начало строки начинается...

137