C# 如何仅求和一个文本框值并在c中的标签中显示结果#

C# 如何仅求和一个文本框值并在c中的标签中显示结果#,c#,winforms,C#,Winforms,这个问题可以重复,但我的问题完全不同 我有一个文本框和一个标签 示例:标签文本已经存在,数字为450,现在我想在textbox中添加数字,textbox值应为450+30=480之和,其中30是textbox值 我所尝试的: lbl_TotalAmount.Text = lbl_TotalAmount.Text + txt_DeliveryCharges.Text; double total = Convert.ToDouble(lbl_TotalAmount.Text); double ch

这个问题可以重复,但我的问题完全不同

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

示例:标签文本已经存在,数字为450,现在我想在textbox中添加数字,textbox值应为450+30=480之和,其中30是textbox值

我所尝试的:

lbl_TotalAmount.Text = lbl_TotalAmount.Text + txt_DeliveryCharges.Text;
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"));
以上结果为:
45030

我尝试过的另一个代码:

lbl_TotalAmount.Text = lbl_TotalAmount.Text + txt_DeliveryCharges.Text;
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"));
上面的代码将对我在文本框中输入的每个值求和,并且当我删除一个单词时,每次的数字都是sum

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

对不起,英语不好

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

你用双人床吗?只需要对非常精确的十进制数字使用。整数,使用整数。。。如果你用它来赚钱,你想用十进制,但这取决于具体情况

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();
上面的代码将对我在文本框中输入的每个值求和,并且当我删除一个单词时,每次的数字都是sum

这很可能是因为您在文本框的
TextChanged
KeyPress
事件中调用代码;这意味着,每次修改文本框中的任何内容时,您的代码都将触发并生成总和

'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"));
相反,添加一个按钮并将代码放入其
单击
事件中,或者如果希望总和在尊重原始值的同时响应每个按键,请将值保存在变量中并使用它计算总和

'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"));
您所做的是字符串连接

不是两个数字的和,必须先将字符串转换为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;
}

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

此外,您在注释中已经声明,您希望在文本框更新时更新此值,因此您需要一个超出范围的变量,以将总计与计算分开。我假设这是一辆购物车之类的东西。在这种情况下,列表将是存储购物车中项目值的明显方式

试试这个:

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);
            }
        }
    }
}
使用系统;
使用System.Collections.Generic//列表所需
命名空间WidowsFormsApplication
{
公共类购物车
{
List shoppingCart=新列表();
受保护的无效AddItemToCart()
{
购物车。添加(450);
}
受保护的void UpdateShappingCart()
{
双倍合计=0;
foreach(shoppingCart中的双项目)//计算shoppingCart的总数
{
合计+=项目;
}
if(Double.TryParse(txt_DeliveryCharges.Text,out Double charges))
{
总计+=费用;//在不更改shoppingCart的情况下添加费用
lbl_TotalAmount.Text=String.Format(“{0:0.00}”,总计);
}
}
}
}


“问题可能重复,但我的问题完全不同”LOL您的上一个示例似乎可以正常工作-lbl_TotalAmount.Text=sum。ToString(“0.00”)将把变量“sum”的值打印到标签上。它显示了什么吗?(不需要调用String.Format)您的第二次尝试是正确的(ish)。。。如果你想让程序“记住”之前输入的值,你需要解释它有什么问题(注意,到目前为止,这已经获得了3张“不清楚你在问什么”的接近票),第二次尝试的结果是450+30,当我按3时,它和453相加,然后按30时,它加453+30=483,当我删除0时,它又和483中的和3相加。Parse dude Parse。这就是从字符串中获取int的方法,结果与我的第一个解决方案相同。“+(Int32.Parse(yourlab.Text)这总是以字符串串接结束。
字符串的格式不正确
看起来与我的第二个解决方案的结果相同。好的,让我们动脑筋。看看调试器中字段的内容。它们包含什么,为什么它们不是有效的字符串,无法解析为在
按键
中检查的数字,但结果相同。是否有任何问题y直接执行此操作,因为在按钮上单击它工作正常。请澄清:让我们使用您的示例,假设您的标签有
450
,如果用户按3,它应该有
453
,然后用户按0(30),它应该有
480
,如果用户按另一个0(300)它应该显示
750
;正确吗?是的,正确。好的,我将答案更新为地址。此代码没有任何问题。结果与我的第二个解决方案相同:(我认为Josh Part给出的答案正在发挥作用。我认为添加一个按钮并通过按钮单击事件将此代码附加到fire是一个好主意。我的第二个解决方案在按钮单击时工作正常,但我想直接执行此操作。