2012-04-15 81 views
0

我正在制作一个程序,需要添加所有numericUpDowns的值,并将其显示在标签上。新程序员C# - 如何添加多个numericUpDown值?

numericUpDowns以编程方式创建并添加到ArrayList。

ArrayList numericUpDownMy = new ArrayList(); 
    numericUpDownMy.Add(new NumericUpDown()); 
     System.Drawing.Point h = new System.Drawing.Point(120, 275+ i * 19);   
     (numericUpDownMy[i] as NumericUpDown).Location = h; 
     (numericUpDownMy[i] as NumericUpDown).Size = new System.Drawing.Size(50, 20); 
     this.Controls.Add(numericUpDownMy[i] as NumericUpDown); 
     int total = (((int)numericUpDown[0]) + ((int)numericUpDown[1]) + ((int)numericUpDown[2]) + ((int)numericUpDown[3])); 
    labelScore.Text = total.ToString(); 

显然这不起作用,因为我没有得到NumericUpDown的实际值。任何意见,将不胜感激。

+0

没有理由使用'ArrayList' - 请查看泛型列表。 – 2012-04-15 23:23:16

回答

3

改变这一行:

decimal total = (numericUpDownMy[1] as NumericUpDown).Value + 
        (numericUpDownMy[2] as NumericUpDown).Value + 
        (numericUpDownMy[3] as NumericUpDown).Value; 

再说不使用ArrayList,使用List<NumericUpDown>,摆脱所有的铸造或在末尾添加到收藏。我会用这种方式编写该代码:

List<NumericUpDown> numUpDnList = new List<NumericUpDown>(); 
    for (int i = 0; i < 3; i++) 
    { 
    NumericUpDown numUpDn = new NumericUpDown(); 
    numUpDn.Location = new System.Drawing.Point(120, 275 + i * 19); 
    numUpDn.Size = new System.Drawing.Size(50, 20); 
    this.Controls.Add(numUpDn); 
    numUpDnList.Add(numUpDn); 
    } 
    decimal total = numUpDnList.Sum(updn => updn.Value); 
    labelScore.Text = total.ToString(); 
+0

谢谢,如果将它添加到button_click事件下,它会生效,但是我怎样才能在numericUpDownMy中更改所有值。 – GuyWhoReadsStockoverflow 2012-04-15 22:56:51

+0

您应该将NumericUpDown的列表声明为窗体的私有成员,并且在NumericUpDown的ValueChanged事件总和中列出所有内容,http://msdn.microsoft.com/en-us/library/system.windows.forms.numericupdown.valuechanged .aspx – 2012-04-15 23:03:56

+0

谢谢你,但我仍然得到错误:错误创建窗口句柄 在线: this.Controls.Add(numUpDn); – GuyWhoReadsStockoverflow 2012-04-15 23:20:17