问题可能重复,但我的问题完全不同。
我有一个文本框和一个标签。
示例:标签文本已经存在,带有数字,例如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"));
上面的代码将对我在文本框中输入的每个值求和,并且当我删除一个单词时,数字都是每次求和。
请给我最好的解决方案,我尝试了很多解决方案来解决此问题,但无法做到这一点。
对不起,英语不好。
答案 0 :(得分:2)
上面的代码将对我在文本框中输入的每个值求和,并且当我删除一个单词时,数字都是每次求和。
最有可能是因为您正在文本框的TextChanged
或KeyPress
事件中调用代码;这意味着每次您在文本框中修改任何内容时,您的代码都会触发并产生总和。
相反,添加一个按钮并将代码放入其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,但这要视情况而定。