2015-12-27 100 views
2

我希望賦值給其命名爲numericUpDown1我希望實現NumericUpDowns,numericUpDown2等是這樣的:遍歷順序控制名稱C#

for (int i = 0; i < readBuf.Length; i++) 
{ 
    numericUpDown[i + 1].Value = Convert.ToDecimal(BitConverter.ToSingle(readBuf[i], startIndex: 0));    
} 

我試圖做的是所描述的方法在這裏:Loop through Textboxes,但它並沒有產生預期的結果,當我使用它像這樣

var allNumUpDwn = this.GetChildControls<NumericUpDown>(); 
int i = 0; 
foreach (NumericUpDown nud in allNumUpDwn) 
{ 
    nud.Value = Convert.ToDecimal(BitConverter.ToSingle(readBuf[i], startIndex: 0)); 
    i++; 
} 
+0

readBuf究竟是什麼?你必須調試你的應用程序。在代碼中插入斷點並查看發生了什麼。 – Dmitry

+0

@Dmitry我正在從另一個進程讀取內存,並使用numericUpDown控件更改它,但有時值會在程序中更改,並且numericUpDowns不會更新,因此我需要再次讀取內存。 –

回答

4

我會用這樣的方法:

var nuds = new [] 
{ 
    numericUpDown1, numericUpDown2, 
    numericUpDown3, numericUpDown4, 
    numericUpDown5, numericUpDown6, 
    // etc 
}; 

for (int i = 0; i < readBuf.Length; i++) 
{ 
    nuds[i].Value = Convert.ToDecimal(BitConverter.ToSingle(readBuf[i], startIndex: 0)); 
} 

這裏最大的好處是,你的代碼是編譯時檢查,因此,如果您開始刪除或重命名控件,那麼你將有一個編譯錯誤,而比運行時錯誤。

+0

我同意Enigmativity。除非您的numericUpDowns是動態構建的,否則此方法更好。 – serhiyb

+0

@Enigmativity啊我希望我可以避免在數組中編寫每個numericUpDown的重複性,但是如果它是需要完成的工作,就必須完成。感謝您的答案! –

+0

@RikusHoney - 你總是可以使用'Controls.Find'和LINQ來收集數組,但是如果有的話會返回到運行時錯誤。 – Enigmativity

0

你可以試試:

for (int i = 0; i < readBuf.Length; i++) 
{ 
    ((NumericUpDown)Controls.Find("numericUpDown" + (i+1))).Value = Convert.ToDecimal(BitConverter.ToSingle(readBuf[i], startIndex: 0));    
}