PDA

View Full Version : پاک کردن تمام TextBoxها



بیتافرهی
جمعه 30 مرداد 1388, 19:24 عصر
سلام
من میخوام بانوشتن کد زیر ،محتویات تمام textBox های فرمم را پاک کنم
ولی اصلا کار نمیکنه.چرا؟

protected void Button2_Click(object sender, EventArgs e)
{
foreach (Control c in this.Controls)
{
if (c is TextBox)
{
TextBox f = (TextBox)c;
f.Text = " ";

}
}
}
کدشو تو win app امتحان کردم ،جواب میده ،ولی تحت وب نه.

Parham.D
شنبه 31 مرداد 1388, 09:28 صبح
Protected void Button2_Click(object sender, EventArgs e)
{
foreach (Control c in this.Controls)
{
if (c.GetType() == typeof(TextBox))
{
TextBox f = (TextBox)c;
f.Text = " ";
}
}

بیتافرهی
شنبه 31 مرداد 1388, 10:56 صبح
نمیدونم چرا این کد ا تو محیط web جواب نمیده؟؟

صابر
شنبه 31 مرداد 1388, 17:51 عصر
احتمالاً به این دلیل که تکست‌باکس‌های شما درون کنترل‌های دیگری قرار دارند. (مثلاً panel). برای اینکه همه textboxها خالی شوند، یک متد بنویسید:


private void ClearControls(ControlCollection col)
{
foreach (Control c in col)
{
if (c.GetType() == typeof(TextBox))
{
TextBox f = (TextBox)c;
f.Text = " ";
}
if (c.Controls.Count > 0)
ClearControls(c.Controls);
}
}


و به این صورت روی کلیک دکمه‌تان صدایش بزنید:


ClearControls(this.Controls);

بیتافرهی
شنبه 31 مرداد 1388, 19:02 عصر
ممنون.
ولی این دو خط کد را برای چی باید اضافه کنم؟آخه این تابع خودش دارای foreach است و به نظر میاد که احتیاجی به فراخوانی تابع از درون خودش نداشته باشه.(هر چند که بدون این دو تا کار نمیکنه)

صابر
شنبه 31 مرداد 1388, 19:26 عصر
به این دلیل باید Recursive باشه چون کنترل‌ها تو در تو هستن.
مثلاً شما یک Page دارین، توی اون یک ContentPlaceHolder هست، توی اون دو تا Panel هست، توی Panel اول ممکنه سه تا Panel باشه و توی هر کدوم چند کنترل TextBox.
برای همین مجبوریم(!) که به صورت Recursive همه رو با بخونیم.

اگه foreach معمولی باشه، فقط کنترل‌های سطح اول خونده می‌شه، و کنترل‌های داخل اون کنترل‌ها خونده نمی‌شه.