C# WinForm累计用电量统计文本框实现问题求助
C# WinForms电费账单应用累计用电量统计修复方案
问题根源
当前代码中txtTtlPwr.Text = txtPwrUse.Text.ToString();仅将当前客户的用电量直接赋值给总用电量文本框,未实现累加逻辑,导致每次新增客户都会覆盖之前的累计值。
解决方案
- 新增类级别的变量存储累计用电量,和
BillTotal保持相同作用域 - 每次新增客户时,将当前客户的用电量累加到该变量
- 用累计变量更新「Total Power Used」文本框
修改后的完整代码
public partial class ElectricBill : Form { List<Customers> customers = new List<Customers>(); decimal BillTotal = 0; // 新增累计用电量变量,用于持久化存储所有客户的用电量总和 decimal totalPowerUsed = 0; public ElectricBill() { InitializeComponent(); } private void btnAddData_Click(object sender, EventArgs e) { string FirstName; string LastName; decimal AcctNo, PwrUse; Customers Bill; if (Validator.IsProvided(txtFname) && Validator.IsProvided(txtLname) && Validator.IsNonNegativeDecimal(txtAcctNo) && Validator.IsNonNegativeDecimal(txtPwrUse) ) { FirstName = txtFname.Text; LastName = txtLname.Text; AcctNo = Convert.ToDecimal(txtAcctNo.Text); PwrUse = Convert.ToDecimal(txtPwrUse.Text); Bill = new Customers(FirstName, LastName, (int)AcctNo, PwrUse); } else { return; } customers.Add(Bill); lstCustomerData.Items.Add(Bill); BillTotal += Bill.CalculateBill(); txtBillTotal.Text = BillTotal.ToString("c"); // 累加当前客户用电量到总变量 totalPowerUsed += Bill.PwrUse; // 更新总用电量文本框 txtTtlPwr.Text = totalPowerUsed.ToString(); ResetEntry(); } private void ResetEntry() { txtFname.Clear(); txtLname.Clear(); txtAcctNo.Clear(); txtPwrUse.Clear(); txtFname.Focus(); } private void btnReset_Click(object sender, EventArgs e) { txtFname.Clear(); txtLname.Clear(); txtAcctNo.Clear(); txtPwrUse.Clear(); } }
补充说明
确保Customers类包含可读取的PwrUse属性(构造函数已传入该值,需对应公共属性),若未定义,需在Customers类中添加:
public class Customers { public decimal PwrUse { get; private set; } public Customers(string firstName, string lastName, int acctNo, decimal pwrUse) { // 其他属性初始化逻辑 PwrUse = pwrUse; } // 已有的CalculateBill方法 public decimal CalculateBill() { // 原有计费逻辑 } }
若需要重置总用电量(如新增全局重置按钮),只需执行totalPowerUsed = 0; txtTtlPwr.Text = "0";即可。
内容的提问来源于stack exchange,提问作者Arthwys Ironhand
相关产品推荐
相关产品推荐

