C# 自己遍历 groupbox

C# iterate through the groupbox themselves

我一直在四处寻找,但我没有真正找到任何有意义的东西。

我想做的是单击按钮在组框之间切换。

我有一个 windows 表格,其中包含 32 个分组框容器,每个分组框有 12 个文本框,一些文本框将收到一个数字,其余的将保持为空;现在可以使用以下代码,我可以再复制粘贴 31 次:

foreach (TextBox x in GROUPBOX1.Controls.OfType<TextBox>())
        {
            int A1 = 0;
            int.TryParse(x.Text, out A1);
            TOTAL += A1;   //defined outside of the method
        }

它检查 GROUPBOX1 中的所有文本框并将所有具有值的文本框加在一起并忽略空文本框。

我想做的是,单击一个按钮,将 int GP =1 增加 +1,然后移动到下一个组框及其文本框集,以便我可以重复使用foreach 循环中的代码,看起来像这样:

foreach (TextBox x in GROUPBOX+GP+.Controls.OfType<TextBox>())
        {
            int A1 = 0;
            int.TryParse(x.Text, out A1);
            TOTAL += A1;   //defined outside of the method
        }

其中 +GP+ 表示 int GP =1 及其后续增量。

现在我的想法来自: this.Controls["GROUPBOX"+box_number].Controls["LABEL"+label_prefix+"_"+label_number+"_LBL"].Text = valueToDisplayInLabel.ToString();

它(通过适当分配 int)将值分配给不同组框中的某些标签。 这可以这样做吗?所有组框和文本框都已创建。

我想要完成的是,接收数字的文本框将全部相加,然后该值将存储在数据库中并添加到所有其他文本框 "totals" 等等存储在数据库中。

 foreach(GroupBox gb in Controls.OfType<GroupBox>())
    {
        foreach(TextBox tb in gb.Controls.OfType<TextBox>())
        {
            int A1 = 0;
            int.TryParse(tb.Text, out A1);
            TOTAL += A1;   //defined outside of the method
        }
    }

这一切都很好,但它不允许我获得每个组框的组合文本框的总数,就像我想单独存储每个组框的总数并在以后将它们加在一起,就像这样获取组框中的所有文本框并将它们转储到列表中,iv 添加 List<int> TOTAL = new List<int>();TOTAL.Insert(0, A1); 以尝试使它对我有用,但现在它将所有文本框值转储到列表中。

基本上我正在寻找 int GB1TOT, GB2TOT 等等 然后 int TOTAL = GB1TOT + GB2TOT

使用两个循环?

        foreach(GroupBox gb in Controls.OfType<GroupBox>())
        {
            foreach(TextBox tb in gb.Controls.OfType<TextBox>())
            {
                int A1 = 0;
                int.TryParse(tb.Text, out A1);
                TOTAL += A1;   //defined outside of the method
            }
        }

这是你想要的吗?将每个 GroupBox 的总数存储到列表 GBtotal 中。然后把它们相加就可以得到总数了。

int Total;
List<int> GBTotal = new List<int>()
foreach(GroupBox gb in Controls.OfType<GroupBox>())
{
    int temp = 0;
    foreach(TextBox tb in gb.Controls.OfType<TextBox>())
    {
        int A1 = 0;
        if(int.TryParse(tb.Text, out A1))
        {
           temp += A1;
        }
    }
    GBTotal.Add(temp);
}
Total = GBTotal.Sum();

从技术上讲,您可以使用

Total = GBTotal[0] + GBTotal[1] + ....

或使用循环得到总数