不同 GroupBox 内的多个 ChechBox

问题描述

我有一个由三个分组框组成的表格。其中两个组框内部有两个复选框,第三个组框内部有三个复选框。每个复选框都有一个金额,如果选中该复选框,则需要计算总金额。

我知道我可以用一堆 if/else 语句来做到这一点,但我想知道我的程序是否有一种更简单的方法来循环遍历每个组框,将选中的框相加,然后显示总数。

如果这不是提出此问题的正确平台,请说明这一点,我将删除此问题。

预先感谢您的任何帮助或建议。

解决方法

假设您有 CheckBox 控件,由某些 GroupBox 中的不同 Form 控件托管,并且复选框的 Text 属性包含您想要求和的数字。如果这听起来是正确的,那么您可以通过一个单行 LINQ 查询来实现:

void SomeCaller()
{
    var total = Controls.OfType<GroupBox>()
        .SelectMany(g => g.Controls.OfType<CheckBox>()
        .Where(c => c.Checked && int.TryParse(c.Text,out _)))
        .Sum(c => int.Parse(c.Text));

    txtOutput.Text = total.ToString();
}

或者……

void SomeCaller()
{
    var total = new[] { groupBox1,groupBox2,groupBox3 }
        .SelectMany(g => g.Controls.OfType<CheckBox>()
        .Where(c => c.Checked && int.TryParse(c.Text,out _)))
        .Sum(c => int.Parse(c.Text));

    txtOutput.Text = total.ToString();
}

如果您不喜欢 LINQ 方式,您可以改为:

void SomeCaller()
{
    var total = 0;

    foreach (var g in Controls.OfType<GroupBox>())
        foreach (var chk in g.Controls.OfType<CheckBox>())
            if (chk.Checked && int.TryParse(chk.Text,out var value))
                total += value;

    txtOutput.Text = total.ToString();
}

如果要求和的数据类型不同,请使用正确的解析器来转换文本。像 decimal.TryParse(..)decimal.Parse(..)

待办事项:

创建一个求和并返回总数的函数。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...