PDA

View Full Version : مبتدی: بازگشت به حالت اولیه فرم



mhdashtii
دوشنبه 06 خرداد 1392, 13:49 عصر
سلام. آیا میشه برنامه ای نوشت که با اون برنامه تمام آبجکتهای داخل فرم به حال اولیه در هنگام لود تغییر کند
مثلا اگر داخل یک textboxی در هنگام لود خالی باشد و داخل آن یک متنی بنویسیم سپس به حالت اولیه برگردد.
ضمنا این مثالی بود در حال کلی میخوام ببینم میشه.

khokhan
دوشنبه 06 خرداد 1392, 14:51 عصر
سلام. آیا میشه برنامه ای نوشت که با اون برنامه تمام آبجکتهای داخل فرم به حال اولیه در هنگام لود تغییر کند
مثلا اگر داخل یک textboxی در هنگام لود خالی باشد و داخل آن یک متنی بنویسیم سپس به حالت اولیه برگردد.
ضمنا این مثالی بود در حال کلی میخوام ببینم میشه.

یه چیزی شبیه این :


private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < this.Controls.Count; i++)
{
if (this.Controls[i] is TextBox)
{
((TextBox)this.Controls[i]).Clear();
}
if (this.Controls[i].HasChildren)
{
ClearTextBoxes(this.Controls[i]);
}
if (this.Controls[i] is CheckBox)
{

((CheckBox)this.Controls[i]).Checked = false;
}

if (this.Controls[i] is RadioButton)
{
((RadioButton)this.Controls[i]).Checked = false;
}

}
}
:لبخند::لبخند::لبخند::لبخند:: بخند::لبخند::لبخند::لبخند::ل خند::لبخند::لبخند:


یه راه بهتر برای اینکه اگه کنترلهاتون داخل گروپ باکس بود یا داخل پنل بود هم یکجا همشون خالی بشن اینه که :

1 . یه کلاس به پرو ژه خودتون اضافه کنین و این کدهارو توی اون کپی کنین :


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace all_in_one
{
class Class1
{
}
public static class extenstions
{
private static Dictionary<Type, Action<Control>> controldefaults = new Dictionary<Type, Action<Control>>() {
{typeof(TextBox), c => ((TextBox)c).Clear()},
{typeof(CheckBox), c => ((CheckBox)c).Checked = false},
{typeof(ListBox), c => ((ListBox)c).Items.Clear()},
{typeof(RadioButton), c => ((RadioButton)c).Checked = false},
{typeof(GroupBox), c => ((GroupBox)c).Controls.ClearControls()},
{typeof(Panel), c => ((Panel)c).Controls.ClearControls()}
};

private static void FindAndInvoke(Type type, Control control)
{
if (controldefaults.ContainsKey(type))
{
controldefaults[type].Invoke(control);
}
}

public static void ClearControls(this Control.ControlCollection controls)
{
foreach (Control control in controls)
{
FindAndInvoke(control.GetType(), control);
}
}

public static void ClearControls<T>(this Control.ControlCollection controls) where T : class
{
if (!controldefaults.ContainsKey(typeof(T))) return;

foreach (Control control in controls)
{
if (control.GetType().Equals(typeof(T)))
{
FindAndInvoke(typeof(T), control);
}
}

}

}
}


بعد تو هر فرمی از پروژه که خواستین ریفرش انجام بشه یه باتن ریفریش به فرم اضافه کنین و این کد رو در رویداد کلیک باتن بنویسین :


this.Controls.ClearControls();

با این کار هر کدام از کنترلهای فرم از هر نوع که باشن وداخل هر کنترل دیگه ای که باشن در امان نمی مونن :لبخند: