2012-04-15 45 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