You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在文本框显示ListBox选中项值并求平均值,遇计算异常求助

ListBox选中项计算总和异常的解决方法

你的问题根源很明确:执行代码前没有清空TextBox2的原有内容。每次运行这段逻辑时,TextBox2会保留上一次操作的文本,新选中的项目内容会直接追加到旧内容后面,导致看起来像是选中了更多项目,总和自然出错。比如第一次选1个项目后TextBox2里是"5+",第二次选2个项目就会变成"5+3+7+",计算时就会把之前的5也算进去。

下面是修正后的完整代码,同时实现「显示选中项」「计算总和」「计算平均值」的需求:

// 先清空控件原有内容,避免数据残留
Label1.Text = "";
TextBox2.Text = "";

// 初始化总和与选中数量变量
decimal totalSum = 0;
int selectedItemCount = ListBox2.SelectedItems.Count;

// 遍历所有选中项
foreach (var selectedItem in ListBox2.SelectedItems)
{
    // 将选中项转换为数值,避免非数值内容报错
    if (decimal.TryParse(selectedItem.ToString(), out decimal itemValue))
    {
        totalSum += itemValue;
        // 在Label中拼接选中项文本
        Label1.Text += selectedItem.ToString() + ",";
        // 在TextBox中拼接计算式
        TextBox2.Text += itemValue.ToString() + "+";
    }
}

// 处理选中项不为空的情况
if (selectedItemCount > 0)
{
    // 移除计算式末尾多余的"+",并添加总和与平均值
    string calculationText = TextBox2.Text.TrimEnd('+');
    decimal average = totalSum / selectedItemCount;
    TextBox2.Text = $"{calculationText} = {totalSum} | 平均值: {average:F2}";
    
    // 移除Label末尾多余的","
    Label1.Text = Label1.Text.TrimEnd(',');
}
else
{
    // 无选中项时的提示
    TextBox2.Text = "未选中任何项目";
    Label1.Text = "";
}

关键修复点

  • 每次执行逻辑前强制清空Label1和TextBox2,彻底避免旧数据干扰
  • 用SelectedItems直接遍历选中项,比通过索引获取更简洁,减少索引操作的潜在错误
  • 加入TryParse做数值校验,防止ListBox中存在非数值项导致程序崩溃
  • 处理了无选中项的边界情况,避免出现除以0的异常
  • 自动移除拼接字符串末尾多余的符号,让显示内容更规范

内容的提问来源于stack exchange,提问作者Afreen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 22:25:41