Как объединить номера двух разных меток с новой меткой?

#c# #webforms

#c# #веб-формы

Вопрос:

Мне нужно вычислить Lb1SumF плюс Lb2SumF, равный Lb3SumF. Я запустил его, и почему-то label3 не отображает ожидаемый результат.

Вот скриншот из результата.

Вот мой код.

 private void Form1_Load(object sender, EventArgs e)
{
    TX1.TabIndex=0;
}

private void TX1_TextChanged(object sender, EventArgs e)
{
    try
    {
        int sumF;
        sumF = Convert.ToInt32(Lb1PriceF.Text) * Convert.ToInt32(TX1.Text);
        Lb1SumF.Text = Convert.ToString(sumF); //Label1 sum

    }

    catch
    {
        Lb1SumF.Text = "0";
    }
}

private void TX2_TextChanged(object sender, EventArgs e)
{
    try
    {
        int sumF;
        sumF = Convert.ToInt32(Lb2PriceF.Text) * Convert.ToInt32(TX2.Text);
        Lb2SumF.Text = Convert.ToString(sumF); //Label2 sum

    }

    catch
    {
        Lb2SumF.Text = "0";
    }
}

private void Lb3_TextChanged(object sender, EventArgs e)
{
       int i = Convert.ToInt32(Lb1SumF.Text);
       int j = Convert.ToInt32(Lb2SumF.Text);
       Lb3.Text = Convert.ToString(i j); // Label3 sum 
}
  

Комментарии:

1. что такое Lb3 это текстовое поле или метка?

2. Lb3_TextChanged может никогда не быть вызвано, поскольку вы не меняете текст метки. Я бы предпочел предложить изменить его на частный метод, а не на обработчик событий. Допустим, вы присваиваете ей значение, UpdateSum() где ваша первая строка должна быть проверяемой !string.IsNullOrEmpty(Lb1SumF.Text) amp;amp; !string.IsNullOrEmpty(Lb2SumF.Text) , после чего вы можете сохранить существующий код. Вызовите UpdateSum() метод в TX1_TextChanged и TX2_TextChanged

3. Я также добавил код, отражающий мой комментарий

Ответ №1:

Lb3_TextChanged может никогда не быть вызвано, поскольку вы не меняете текст метки. Я бы предложил изменить его на частный метод, а не на обработчик событий. Вот каким мог бы быть код:

     private void TX1_TextChanged(object sender, EventArgs e)
    {
        try
        {
            int sumF;
            sumF = Convert.ToInt32(Lb1PriceF.Text) * Convert.ToInt32(TX1.Text);
            Lb1SumF.Text = Convert.ToString(sumF); //Label1 sum

            // Call to update sum
            UpdateSum();
        }
        catch
        {
            Lb1SumF.Text = "0";
        }
    }

    private void TX2_TextChanged(object sender, EventArgs e)
    {
        try
        {
            int sumF;
            sumF = Convert.ToInt32(Lb2PriceF.Text) * Convert.ToInt32(TX2.Text);
            Lb2SumF.Text = Convert.ToString(sumF); //Label2 sum

            // Call to update sum
            UpdateSum();
        }
        catch
        {
            Lb2SumF.Text = "0";
        }
    }

    // private void Lb3_TextChanged(object sender, EventArgs e)
    private void UpdateSum()
    {
           int sum = 0;

           if(!string.IsNullOrEmpty(Lb1SumF.Text) amp;amp; !string.IsNullOrEmpty(Lb2SumF.Text))
           {
              sum = Convert.ToInt32(Lb1SumF.Text)   Convert.ToInt32(Lb2SumF.Text);
           }

           Lb3.Text = Convert.ToString(sum);
    }
  

Ответ №2:

Замените свой код на этот, и он будет работать, вы используете оператор *, где вы должны использовать оператор , я прокомментировал эти строки в вашем коде и заменил их для лучшего понимания. Удачного кодирования

 namespace WindowsFormsApp8
{
    public partial class Form1 : Form
    {
        private void Lb1SumF_Click(object sender, EventArgs e)
        {
        }

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            TX1.TabIndex=0;
        }

        private void label4_Click(object sender, EventArgs e)
        {
        }

        private void TX1_TextChanged(object sender, EventArgs e)
        {
            try
            {
                int sumF; 
                //sumF = Convert.ToInt32(Lb1PriceF.Text) * Convert.ToInt32(TX1.Text); // You were doing wrong here , you were multiplying these values
                sumF = Convert.ToInt32(Lb1PriceF.Text)   Convert.ToInt32(TX1.Text);
                Lb1SumF.Text = Convert.ToString(sumF); //Label1 sum
            }
            catch
            {
                Lb1SumF.Text = "0";
            }
        }

        private void TX2_TextChanged(object sender, EventArgs e)
        {
            try
            {
                int sumF;
                //sumF = Convert.ToInt32(Lb2PriceF.Text) * Convert.ToInt32(TX2.Text); //you are doing it wrong here , you are multiplying
                sumF = Convert.ToInt32(Lb2PriceF.Text)   Convert.ToInt32(TX2.Text);
                Lb2SumF.Text = Convert.ToString(sumF); //Label2 sum
            }
            catch
            {
                Lb2SumF.Text = "0";
            }
        }

        private void Lb3_TextChanged(object sender, EventArgs e)
        {
               int i = Convert.ToInt32(Lb1SumF.Text);
               int j = Convert.ToInt32(Lb2SumF.Text);
               Lb3.Text = Convert.ToString(i j); // Label3 sum 
        }

        private void Lb3SumF_Click(object sender, EventArgs e)
        {
        }
   }
}
  

Комментарии:

1. Замена * на не вызывает событие, которое никогда не должно было вызываться.

2. Он использует неправильный оператор, Как я узнаю без Gui, какое событие присоединено к какой функции здесь. @MasoudKeshavarz

3. @MasoudKeshavarz Поскольку он упомянул этот URL своего вывода imgur.com/WffG3sZ кажется, что его события работают нормально, но он получает неправильный ответ только о своем операторе ‘*’ вместо оператора ‘ ‘.