Невозможно решить это исключение при выполнении расчета - PullRequest
0 голосов
/ 26 марта 2020

У меня есть этот код в текстовом поле 2, который умножает значение текстового поля 1 и 2 добавляет результат в текстовое поле 3:

private void textBox2_TextChanged(object sender, EventArgs e)
        {
            textBox3.Text = Convert.ToString(Convert.ToInt32(textBox1.Text) * Convert.ToInt32(textBox2.Text));
        }

Когда я вставляю данные в базу данных через это

code private void button1_Click(object sender, EventArgs e)
        {
            con.Open();
            SqlCommand cmd = con.CreateCommand();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "Insert into Receipts(Qty,ItemName,Price,Amount) values('" + textBox2.Text + "','" + textBox4.Text + "','" + textBox1.Text + "','" + textBox3.Text + "')";
            cmd.ExecuteNonQuery();

            con.Close();
            this.receiptsTableAdapter.Fill(this.shopDataSet.Receipts);
            textBox4.Clear();
            textBox1.Clear();
            textBox2.Clear();
            textBox3.Clear();


            //MessageBox.Show("Data Inserted !");
        }

Я получаю сообщение об ошибке textBox2.Clear (); (исключительная обработка, но данные вставляются успешно) без этого программа работает нормально,

textBox4.Clear();
            textBox1.Clear();
            textBox2.Clear();
            textBox3.Clear();

Я хочу очистить текстовые поля, я получаю только ошибку на textbox2, в котором есть код для умножения значения текстового поля 1 и 2 добавляет результат в текстовое поле 3.

спасибо:)

Ответы [ 2 ]

1 голос
/ 26 марта 2020

Я получаю сообщение об ошибке textBox2.Clear (); (исключительная обработка, но данные вставляются успешно) без этого программа работает нормально,

 textBox4.Clear();
 textBox1.Clear(); // This is the first problem
 textBox2.Clear(); // This is the second problem
 textBox3.Clear();

Причина этой ошибки - событие textBox2_TextChanged. Внутри вы пытаетесь использовать свойство Text для выполнения вычислений, это не удается, потому что свойство Text пусто и его не удается преобразовать.

 textBox3.Text = Convert.ToString(Convert.ToInt32(textBox1.Text) * Convert.ToInt32(textBox2.Text));

Чтобы это исправить, вы можете сначала проверить , если свойство Text может быть успешно проанализировано перед его использованием с использованием метода Int.TryParse вместе с переменной out; доступен только таргетинг C# >= 7.0. Например:

 private void textBox2_TextChanged(object sender, EventArgs e)
 {
    if(int.TryParse(textBox1.Text, out int txt1) && int.TryParse(textBox2.Text, out int txt2))
    {
       textBox3.Text = (txt1 * txt2).ToString();
    }
 }

Другая версия, которую вы, возможно, могли бы использовать, ориентируясь на версии старше C# 7.0:

 private void textBox2_TextChanged(object sender, EventArgs e)
 {
    int txt1;
    int txt2;
    if(int.TryParse(textBox1.Text, out txt1) && int.TryParse(textBox2.Text, out txt2))
    {
       textBox3.Text = (txt1 * txt2).ToString();
    }
 }
0 голосов
/ 26 марта 2020

Как уже говорили другие, проблема, с которой вы сталкиваетесь, связана с textBox2_TextChanged, эта void вызывается каждый раз, когда вы что-либо меняете в textBox2.

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

Вот кое-что, чтобы вы начали.

https://dotnetfiddle.net/lyNnQY

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...