0

私は、パネルの下にコントロールがリストされているウィンドウフォームを持ってい ます。必要な数の userControls を追加できます。userControl 定義は、次の 5 つのコントロールで構成されます。

コンボボックス1 コンボボックス2 テキストボックス1 テキストボックス2 テキストボックス3

動的に生成されたすべてのユーザー コントロール コントロールの textbox3 のテキストを追加し、winform のラベルに設定したいのですが、どうすればよいですか? [OK] ボタンをクリックして、このコードを試しました

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

動的に生成されたすべてのコントロールのテキストの合計を取得する方法

4

3 に答える 3

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));
            }
            );
于 2013-01-05T06:14:54.013 に答える
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
于 2013-01-05T06:07:19.673 に答える
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(); 
于 2013-01-05T06:24:06.200 に答える