不同 GroupBoxes 内的多个 CheckBoxes

Multiple ChechBoxes inside different GroupBoxes

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

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

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

在此先感谢您的帮助或建议。

假设您有 CheckBox 控件,在某些 Form 中由不同的 GroupBox 控件托管,并且复选框的 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(..).

待办事项:

创建一个求和 returns 总和的函数。