2011-10-13 63 views
1

我的任務是重新構建Web表單項目中的一些代碼,並且我認爲可以將代碼的一部分合併爲一個方法,然後傳遞一個int並根據該方法修改控件。下面是代碼:動態訪問基於變量的ASP.NET控件...有可能嗎?

txtline1_amnestyCheck.Text = "Y"; 
txtline1_range.BackColor = System.Drawing.Color.Azure; 
txtline1_amnt.BackColor = System.Drawing.Color.Azure; 
txtline1_minreqmet.BackColor = System.Drawing.Color.Azure; 
txtline1_elizperdt.BackColor = System.Drawing.Color.Azure; 
txtline1_amnestyCheck.BackColor = System.Drawing.Color.Azure; 
txtline1_afterNSFamnt.BackColor = System.Drawing.Color.Azure; 
txtline1_NSFamnt.BackColor = System.Drawing.Color.Azure; 

有從txtline1通過txtline12測距的這個十二個不同的字段部分。我的希望是使這個看起來像這樣的單一方法:

private void ChangeTextlines(int i) 
{ 
    txtlinei_amnestyCheck.Text = "Y"; 
    txtlinei_range.BackColor = System.Drawing.Color.Azure; 
    txtlinei_amnt.BackColor = System.Drawing.Color.Azure; 
    txtlinei_minreqmet.BackColor = System.Drawing.Color.Azure; 
    txtlinei_elizperdt.BackColor = System.Drawing.Color.Azure; 
    txtlinei_amnestyCheck.BackColor = System.Drawing.Color.Azure; 
    txtlinei_afterNSFamnt.BackColor = System.Drawing.Color.Azure; 
    txtlinei_NSFamnt.BackColor = System.Drawing.Color.Azure; 
} 

在哪裏我將是行號正在改變。現在有辦法讓我能夠做到這一點,或者我堅持96行代碼爲每個txtline有一個組?

回答

3

如果你知道他們都坐在家長控制,那麼你可以使用它的FindControl方法來訪問每一個。

var myControl = (ControlType)ParentControl.FindControl("txtline" + i + "_anestyCheck"); 
+0

這可能是我在找的,謝謝! – Jetti

+0

這工作,非常感謝你!第二個讓我接受並回答我會將其標記爲已接受。 – Jetti

1

如果你試圖申請一個共同的目標,以一種特定的控制,你可以通過控件在窗體上循環做到這一點。這個page有一個很好的例子,說明如何從上到下循環。例如

... // Control Loop (see linked site) 

if (control is Label) 
{ 
    Label label = (Label)control; 
    label.BackColor = System.Drawing.Color.Azure 
} 

這樣,你不需要用它的名稱來標識每個控件,而是一種你正試圖設置控制。如果您知道所有的控件都在您定義的面板中,那麼您可以遍歷該面板上的控件,查找要設置的特定類型。