کد فوق صحیح نیست. چون فقط سطح اول کنترل های صفحه رو برگشت میده.
تمامی کنترل های صفحه در سلسله مراتب پدر فرزندی قرار می گیرن که باید از طریق یک "تابع بازگشتی" به فرزندان کنترل مورد نظر دسترسی پیدا کرد.
یک تابع نمونه واست نوشتم به شکل ذیل:
VB.NET
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
GetControls(Me) 'Example 1
'GetControls(GridView1) 'Example 2
'GetControls(Panel1) 'Example 3
End Sub
Private Sub GetControls(ByVal parentControl As Control)
For Each ctl As Control In parentControl.Controls
If (ctl.HasControls) Then
GetControls(ctl)
ElseIf (ctl.GetType Is GetType(TextBox)) Then
DirectCast(ctl, TextBox).BackColor = Drawing.Color.Yellow
End If
Next
End Sub
C#
protected void Button1_Click(object sender, EventArgs e)
{
GetControls(Me); //Example 1
//GetControls(GridView1); //Example 2
//GetControls(Panel1); //Example 3
}
private void GetControl(System.Web.UI.Control parentControl)
{
foreach (System.Web.UI.Control ctl in parentControl.Controls)
{
if (ctl.HasControls())
{
GetControl(ctl);
}
else if (ctl.GetType() == typeof(TextBox))
{
((TextBox)ctl).BackColor = System.Drawing.Color.Yellow;
}
}
}
در کدهای بالا، رنگ پس زمینه ی تمامی TextBox های موجود در صفحه زرد میشه. برای اینکه فقط TextBox خاصی رو تحت تاثیر قرار بدی، می تونی اون TextBox ها رو در کنترل Panel قرار بدی و به متد GetControls، نام کنترل Panel رو پاس بدی.
موفق باشید.