خودم نوشتم.
فقط دوستان ببینید مشکلی نداره.
کار می کنه. منظورم اینه که ببینید میشه بهترش کرد یا چیزه خاصی داره که ممکنه به مشکل بخوره.
یه کلاس تعریف کردم و :
static class clsFormOperation
{
// تعریف دیکشنری
static Dictionary<string, string> nameValue = new Dictionary<string, string>();
// ذخیره اطلاعات کنترلها داخل دیکشنری
public static void saveDataToDictionaty(Form f)
{
foreach (Control c in f.Controls)
{
if (c is TextBox)
{
nameValue.Add(c.Name, ((TextBox)c).Text);
}
else if (c is ComboBox)
{
nameValue.Add(c.Name, ((ComboBox)c).SelectedValue.ToString());
}
searchControlsForSave(c);
}
}
// گرفتن اطلاعات کنترلها از دیکشنری
public static void getDataFromDictionaty(Form f)
{
foreach (Control c in f.Controls)
{
foreach (KeyValuePair<string, string> kvp in nameValue)
{
if (c is TextBox)
{
if (kvp.Key == c.Name)
{
c.Text = kvp.Value.ToString();
}
}
if (c is ComboBox)
{
if (kvp.Key == c.Name)
{
((ComboBox)c).SelectedValue = kvp.Value.ToString();
}
}
}
searchControlsForGet(c);
}
nameValue.Clear();
}
// جستجوی کنترلهای داخل فرم برای گرفتن مقادیر آنها برای ذخیره در دیکشنری
static void searchControlsForSave(Control c)
{
foreach (Control ct in c.Controls)
{
if (ct is TextBox)
{
nameValue.Add(ct.Name, ((TextBox)ct).Text);
}
else if (ct is ComboBox)
{
nameValue.Add(ct.Name, ((ComboBox)ct).SelectedValue.ToString());
}
searchControlsForSave(ct);
}
}
// جستجوی کنترلها برای پیدا کردن کنترل و ریختن مقدار داخل کنترل از دیکشنری
static void searchControlsForGet(Control c)
{
foreach (Control ct in c.Controls)
{
foreach (KeyValuePair<string, string> kvp in nameValue)
{
if (ct is TextBox)
{
if (kvp.Key == ct.Name)
{
ct.Text = kvp.Value.ToString();
}
}
if (ct is ComboBox)
{
if (kvp.Key == ct.Name)
{
((ComboBox)ct).SelectedValue = kvp.Value.ToString();
}
}
}
searchControlsForGet(ct);
}
}
}
حالا میشه کنترلهای دیگه رو هم داخلش قرار داد.
برای استفاده هم در داخل catch که اطلاعات رو save کنه:
clsFormOperation.saveDataToDictionaty(this);
this.Close();
و برای بازخوانی داخل رویداد لود فرم:
clsFormOperation.getDataFromDictionaty(this);