【问题标题】:C# iterate through the groupbox themselvesC# 自己遍历 groupbox
【发布时间】:2016-09-20 14:53:32
【问题描述】:

我一直在环顾四周,我真的没有找到任何有意义的东西。

我想要做的是通过单击按钮在组框之间进行更改。

我拥有的是一个带有 32 个分组框容器的 Windows 窗体,每个容器中有 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,从而移动到下一个组框及其文本框集,以便我可以重用@987654324 中的代码@循环,看起来像这样:

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)将值分配给不同组框中的某些标签。 可以这样做吗?所有的组框和文本框都已经创建好了。

我想要完成的是,接收数字的文本框将全部相加,然后该值将存储在数据库中,并添加到所有其他“总计”中,并且也存储在数据库中.

 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
        }
    }

这很好用,但它不允许我获取每个组框的组合文本框的总数,就像我想单独存储每个组框的总数并在稍后阶段将它们加在一起,因为这需要 ALL组框中的文本框并将它们转储到列表中,iv 添加了 List&lt;int&gt; TOTAL = new List&lt;int&gt;();TOTAL.Insert(0, A1); 以尝试使这对我有用,但现在它将所有文本框值转储到列表中。

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

【问题讨论】:

    标签: c# groupbox


    【解决方案1】:

    使用两个循环?

            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
                }
            }
    

    【讨论】:

    • 谢谢,虽然这确实为我指明了正确的方向,但它并没有完全回答我的问题。 +1
    【解决方案2】:

    这是你想要的吗?将每个 GroupBox 的总数存储到 List 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] + ....
    

    或者使用循环获取总数

    【讨论】:

    • 这个解释很清楚,对我帮助很大。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多