PDA

View Full Version : بدست اوردن نام تمامی کنترلها



BestLover
جمعه 15 آذر 1387, 11:17 صبح
سلام. خسته نباشید.
من در صفحه خودم تعدادی textbox دارم و بعنوان مثال می خوام رنگ زمینه تمامی اونها رو تغییر بدم. اما نمی دونم که چطور باید این کار رو بکنم. به نظر باید با حلقه for..each این کار رو انجام داد. اما چگونگیشو نمی دونم. در ضمن من علاو بر textbox کنترلهای دیگه ای هم در اون صفحه دارم.

اگه امکان داره منو راهنمایی کنید.
متشکرم

s_ahmadneya
جمعه 15 آذر 1387, 11:43 صبح
اشیاء یک فرم در اخل پروپرتی controlsقرار دارند با چک کردن انها می توانید این کار را انجام دهید
در کد زیر تمامی تکس باکس ها را با تکس "اسماعیل احمدنیا" پر می کند شما می توانید هر پروپرتی دیگر را تغییر دهید وحتی می توانید شی را کلا: حذف ویا یک شی جدید ایجاد و رو فرم قرار دهید .اصولا" این کار پایه واساس فرم جنریتور می باشد.سوالی بود د ر خدمتیم . موفق باشید


for (int i = 0; i <
this.Controls.Count; i++)
{
if (this.Controls[i].GetType() == typeof(
TextBox
))
{

this.Controls[i].Text= "اسماعیل احمدنیا";
}
}

Behrouz_Rad
جمعه 15 آذر 1387, 13:03 عصر
کد فوق صحیح نیست. چون فقط سطح اول کنترل های صفحه رو برگشت میده.
تمامی کنترل های صفحه در سلسله مراتب پدر فرزندی قرار می گیرن که باید از طریق یک "تابع بازگشتی" به فرزندان کنترل مورد نظر دسترسی پیدا کرد.

یک تابع نمونه واست نوشتم به شکل ذیل:

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 رو پاس بدی.

موفق باشید.