2012-10-14 47 views
2

我試圖通過google搜索找到答案,但沒有運氣。 我設計了包含文本框的面板,所以我可以遍歷其控件 並將每個文本框保存在一個數組中(所以我可以在需要時迭代該數組), 事情是我無法找到面板知道哪個屬性如何安排順序來迭代它內部的控件,這是第一,第二等。 我想也許它是通過標記,但是當我將它們改變爲我的喜好時,它沒有改變任何東西。 所以我想知道 - 你怎麼能告訴面板迭代按照你喜歡的方式通過控件? 哪些屬性你需要改變?迭代面板控制

private void CreateTxtArr() 
{ 
    txts = new TextBox[8]; 
    for (int i = 0; i < pnlTxt.Controls.Count; i++) 
     txts[i] = (TextBox)pnlTxt.Controls[i]; 
} 
+0

駕駛室請你對你正在嘗試做的闡述更簡單的方法嗎?我的理解是,您正試圖按特定順序獲取這些文本框。對? –

+0

是的,我確實通過在設計師中改變它來解決它,但我覺得這是一種浪費時間的好方法。 – user1652656

+0

這是我試圖做的一般:我有datagrid和我「綁定」它的文本框,所以我想文本框是在相同的順序在它是在dg ..當我使用這個算法的順序是搞砸了,我不知道哪個內部變量是迭代面板時使用的內部變量(如上面的代碼)。 – user1652656

回答

2

您可以使用is運營商來檢查板的the child controlisTextBox

private void CreateTxtArr() 
{ 
    txts = new TextBox[8]; 
    for (int i = 0; i < pnlTxt.Controls.Count; i++) 
     if(pnlTxt.Controls[i] is TextBox) 
       txts[i] = (TextBox)pnlTxt.Controls[i]; 
} 
+0

你也可以用關鍵字 – Wanabrutbeer

+0

施放是的,也可以使用。 – Adil

1

如果你可以使用的.Net 3.5或更高版本,你可以使用LINQ做到這一點非常伊斯利:

private void CreateTxtArray() 
{ 
    // txts is an Array of TextBox 
    var txts = (from Control ctrl in pnlTxt.Controls 
       where ctrl is TextBox 
       select ctrl as TextBox).ToArray(); 
} 

是一種更簡單的方法來重複,在所有情況下

編輯:這是一個古老的答案,我已經忘記了,下面有做

private void CreateTxtArray() 
{ 
    // txts is an Array of TextBox 
    var txts = pnlTxt.Controls.OfType<TextBox>().ToArray(); 
}