2012-07-21 56 views
0

我需要檢查文本和無限量的文本框的各種屬性。我雖然我可能能夠做到這一點下面的方式使用{我}(所以它會檢查通過tbEavelength1,tbEavelength2,tbEavelength3等)這不起作用想知道如果有人有任何想法?如何循環遍歷i量的文本框?

for (int i = 1; i <= comboBox1.SelectedIndex + 1; i++) 
{ 
    if (tbEaveLength{i}.IsEnabled == false) 
    { 
     eaveLength{i} = 0; 
    } 
    else if (tbEaveLength{i}.Text == "") 
    { 
     throw new Exception("EaveLength {i} must have a value"); 
    } 
    else if (!double.TryParse(tbEaveLength{i}.Text, out eaveLength{i})) 
    { 
     throw new Exception("EaveLength {i} must be numerical"); 
    } 
} 

在此先感謝您的幫助!

+0

沒有定義的方式循環無限的se噸。至少你永遠不會做。 – 2012-07-21 12:09:45

+0

@MareInfinitus這可能是一個糟糕的措辭,因爲ESL。顯然,你無法在屏幕上顯示無限量的文本框。 – millimoose 2012-07-21 13:00:17

+0

!無限!!這是很多內存:o) – NestorArturo 2012-07-21 13:56:31

回答

0

嗨,你可以嘗試通過使用FindControl()方法找到文本框。我假設你正在使用Asp.net頁面。

例如,

for (int i = 1; i <= comboBox1.SelectedIndex + 1; i++) 
{ 
    var tbEaveLength = FindControl("tbEaveLength" + i); 
    if (tbEaveLength.IsEnabled == false) 
    { 
     eaveLength = 0; 
    } 
    else if (tbEaveLength.Text == "") 
    { 
     throw new Exception("EaveLength {i} must have a value"); 
    } 
    else if (!double.TryParse(tbEaveLength{i}.Text, out eaveLength{i})) 
    { 
     throw new Exception("EaveLength {i} must be numerical"); 
    } 
} 
+0

抱歉不清楚這是在wpf – 2012-07-21 12:01:20

+0

行。你可能想閱讀http://stackoverflow.com/questions/636383/wpf-ways-to-find-controls 希望它有幫助 – ysrb 2012-07-21 12:02:32

1

什麼是關於創建List<TextBox>,然後使用索引得到一個文本框和做同樣的事情與使用List<double> lenght?

//List<TextBox> listTextBoxes = new List<TextBox>(); 
//populate the list of textboxes 

//List<double> listEaveLength = new List<double>(); 

for (int i = 1; i <= comboBox1.SelectedIndex + 1; i++) 
{ 
    if (listTextBoxes[i].IsEnabled == false) 
    { 
     listEaveLength[i] = 0; 
    } 
    else if (listTextBoxes[i].Text == "") 
    { 
     throw new Exception(listTextBoxes[i].Name + " must have a value"); 
    } 
    else if (!double.TryParse(listTextBoxes[i].Text, out listEaveLength[i])) 
    { 
     throw new Exception(listTextBoxes[i].Name + " must be numerical"); 
    } 
} 

至於說millimoose管理並行陣列可能很難,而不是更好的解決方案。 所以,你可以創建一個這樣的類:

class DataStructure 
{ 
    public TextBox Textbox 
    { 
     get; 
     set; 
    } 

    public double Lenght 
    { 
     get; 
     set;  
    } 

    public DataStructure(TextBox Textbox) 
    { 
     this.Textbox = Textbox; 
    } 
} 

然後一直使用List<DataStructure>

//List<DataStructure> myList = new LList<DataStructure>(); 
//myList.Add(new DataStructure(myTextBox)); 
//... populate your list 

for (int i = 1; i <= comboBox1.SelectedIndex + 1; i++) 
{ 
    if (myList[i].Textbox.IsEnabled == false) 
    { 
     myList[i].Lenght = 0; 
    } 
    else if (myList[i].Textbox.Text == "") 
    { 
     throw new Exception(myList[i].Textbox.Name + " must have a value"); 
    } 
    else if (!double.TryParse(myList[i].Textbox.Text, out myList[i].Lenght)) 
    { 
     throw new Exception(myList[i].Textbox.Name + " must be numerical"); 
    } 
} 
+1

它可能會更好創建一個數據結構來保存'TextBox'和關聯的'int'。並行陣列笨重。 – millimoose 2012-07-21 13:03:33

+0

是的,你是對的它可能是另一種解決方案。 – 2012-07-21 13:04:40

+0

謝謝我編輯了我的答案。 – 2012-07-21 13:16:10

0

如果你是在隱藏文件中的代碼,那麼你可以使用方法FindName獲得實例一個文本框通過傳遞它的名字,然後可以在這個特定的文本框上執行操作 -

for (int i = 1; i <= comboBox1.SelectedIndex + 1; i++) 
{ 
    TextBox textBox = (TextBox)FindName("tbEaveLength" + i); 
    if (textBox.IsEnabled == false) 
    { 
     eaveLength{i} = 0; 
    } 
    else if (textBox.Text == "") 
    { 
     throw new Exception("EaveLength {i} must have a value"); 
    } 
    else if (!double.TryParse(textBox.Text, out eaveLength{i})) 
    { 
     throw new Exception("EaveLength {i} must be numerical"); 
    } 
}