【问题标题】:getting sum of text from all the dynamically generated control从所有动态生成的控件中获取文本总和
【发布时间】:2012-12-19 14:24:53
【问题描述】:

我有一个 Windows 窗体,其中有下面列出的控件 面板 1 button1 = 添加新手机 button2 = 好的 单击 button1 时,将添加一个用户控件。您可以根据需要添加尽可能多的用户控件。 userControl 定义由五个控件组成:

组合框1 组合框2 文本框1 文本框2 文本框3

我想添加所有动态生成的用户控件控件的 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);  
      }
}

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

【问题讨论】:

  • 错误信息是什么?并且“int g”应该被赋予一个值(很可能是0,即int g = 0;)。
  • 请告诉我们错误信息。我假设您正在尝试将非数字值转换为整数!此外,您应该在 foreach 之外定义 g

标签: c# winforms


【解决方案1】:

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

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】:
 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));
            }
            );

【讨论】:

    【解决方案3】:
    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(); 
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多