从所有动态生成的控件中获取文本总和

时间:2013-01-05 06:02:45

标签: c# winforms

我有一个窗体,下面列出了控件 的 PANEL1 button1 =添加新手机 button2 = ok 单击button1时,会添加usercontrol。您可以根据需要添加尽可能多的userControl。 userControl定义包含五个控件:

combobox1 combobox2 TextBox1的 TextBox2中 textbox3

我想添加所有动态生成的usercontrol控件的textbox3文本并设置为winform上的标签我该怎么办?单击确定按钮  我试过这段代码

foreach (Control ctrl in panel1.Controls)
{
      if (ctrl is UserControl)
      {
           UserControl1 myCrl = ctrl as UserControl1;
           int g;
           // but this doesnt happen an error is coming
           g += Convert.ToInt32(myCrl.textbox3.Text);  
      }
}

如何获取所有动态生成的控件文本的总和

3 个答案:

答案 0 :(得分:2)

 int sum = 0;
        panel1.Controls.OfType<UserControl>().ToList().ForEach(
            x =>
            {
                TextBox ctl = x.Controls.OfType<TextBox>().Where(y => y.Name == "textbox2").FirstOrDefault();
                sum += (ctl == null ? 0 : (!String.IsNullOrEmpty(ctl.Text.Trim()) ? Convert.ToInt32(ctl.Text.Trim()) : 0));
            }
            );

答案 1 :(得分:1)

可能你的“错误”是你在g循环中声明foreach,所以你实际上并没有任何总和。此外,您不初始化它。将您的代码更改为:

var g = 0;
foreach (Control ctrl in Controls)
{
    if (ctrl is UserControl1)
    {
        var myCrl = ctrl as UserControl1;
        g += Convert.ToInt32(myCrl.textbox2.Text);
    }
}
//Set your label's text

答案 2 :(得分:1)

double totalSumValue = 0;
foreach (Control ctrl in Controls)
{
    if (ctrl is UserControl)
    {
        var myCrl = ctrl as UserControl;
        totalSumValue  += Convert.ToInt32(myCrl.textbox3.Text);
    }
}
lblSumValue.text=totalSumValue.toString();