不同 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 总和的函数。
我有一个由三个组框组成的表格。其中两个组框内部有两个复选框,第三组框内部有三个复选框。每个复选框都有一个金额,如果选中该复选框,则需要计算总金额。
我知道我可以用一堆 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 总和的函数。