如何仅对一个文本框值求和并在c#

时间:2018-09-27 16:12:54

标签: c# winforms

问题可能重复,但我的问题完全不同。

我有一个文本框和一个标签。

示例:标签文本已经存在,带有数字,例如450现在我想在文本框中添加数字,并且文本框的值应为450 + 30 = 480的总和,其中30是文本框的值。

我尝试过的事情:

lbl_TotalAmount.Text = lbl_TotalAmount.Text + txt_DeliveryCharges.Text;

以上结果为:45030

我尝试过的另一个代码:

double total = Convert.ToDouble(lbl_TotalAmount.Text);
double charges = Convert.ToDouble(txt_DeliveryCharges.Text);
double sum = total + charges;
lbl_TotalAmount.Text = String.Format(sum.ToString("0.00"));

上面的代码将对我在文本框中输入的每个值求和,并且当我删除一个单词时,数字都是每次求和。

请给我最好的解决方案,我尝试了很多解决方案来解决此问题,但无法做到这一点。

对不起,英语不好。

5 个答案:

答案 0 :(得分:2)

  

上面的代码将对我在文本框中输入的每个值求和,并且当我删除一个单词时,数字都是每次求和。

最有可能是因为您正在文本框的TextChangedKeyPress事件中调用代码;这意味着每次您在文本框中修改任何内容时,您的代码都会触发并产生总和。

相反,添加一个按钮并将代码放入其Click事件中,或者,如果您希望总和在尊重原始值的同时响应每次按键,请将您的值保存在变量中,然后使用它来计算总和。

'Declare a variable at form level
 Dim originalValue as Double

'Code where you put your value in a label, put it also in a variable
lbl_TotalAmount.text = 450
originalValue = 450

'Modify your code to use the original value instead of the label
double charges = Convert.ToDouble(txt_DeliveryCharges.Text);
double sum = originalValue + charges;
lbl_TotalAmount.Text = String.Format(sum.ToString("0.00"));

答案 1 :(得分:1)

您的字符串需要转换(解析)为双精度(因为它们表示货币值),但是您需要确保您不尝试解析无法转换的内容。 TryParse()的计算结果为true(如果解析失败则为false),因此可以避免可能的异常。

此外,您已在注释中指出要在文本框更新时对此进行更新,因此您需要一个超出范围的变量,以使总数与计算分开。我将从假设这是购物车之类的东西开始工作。在这种情况下,使用List <>是在购物车中存储商品值的一种明显方法。

尝试一下:

using System;
using System.Collections.Generic; //required for List<>

namespace WidowsFormsApplication
{
    public class ShoppingCart
    {
        List<double> shoppingCart = new List<double>();

        protected void AddItemToCart()
        {
            shoppingCart.Add(450);
        }

        protected void UpdateShoppingCart()
        {
            double total = 0;
            foreach (double item in shoppingCart) //calculate total of shoppingCart
            {
                total += item;
            }
            if (Double.TryParse(txt_DeliveryCharges.Text, out double charges))
            {
                total += charges; //add charges without altering shoppingCart
                lbl_TotalAmount.Text = String.Format("{0:0.00}", total);
            }
        }
    }
}

答案 2 :(得分:0)

lbl_TotalAmount.Text = lbl_TotalAmount.Text + txt_DeliveryCharges.Text;

lbl_TotalAmount.Text和txt_DeliveryCharges.Text是文本字段。您不能对文本字段进行算术运算。您必须先转换为数字,然后进行算术运算,然后再转换回去

var charge = Int32.Parse(txt_DeliveryCharges.Text);
var total = Int32.Parse(lbl_TotalAmount.Text);
var newTotal = charge + total;
lbl_TotalAmount.Text = newTotal.ToString();

答案 3 :(得分:0)

  

您正在做的是字符串连接

不是两个数字的和,您必须先将字符串转换为int

这是您可以做到的

int x = 0, y = 0;

if (Int32.TryParse(lbl_TotalAmount.Text out x) && Int32.TryParse(txt_DeliveryCharges.Text, out y))
{
    // you know that the parsing attempt
    // was successful
    lbl_TotalAmount.Text = x + y;
}

答案 4 :(得分:-1)

yourlabel.Text = ""+ (Int32.Parse(yourlabel.Text)+Int.Parse(your textbox.Text));

 yourlabel.Text = ""+(Double.Parse(yourlabel.Text)+Double.Parse(yourtextbox.Text));

您使用双打吗?只需要超级精确的十进制数。整数,请使用int ...如果要使用它来赚钱,则要使用Decimal,但这要视情况而定。