Обновление содержимого формы //C#
Проблема такова.
Есть форма, содержимое которой заполняется в методе
Код:
private void Form1_Load(object sender, EventArgs e)
При нажатии на кнопку на этой форме открывается новая форма (диалог) поверх предыдущей.
После выхода из этого диалогового окна необходимо обновить содержимое первого окна.
Точнее сказать выполнить код, находящийся в методе Form1_Load.
Подскажите, как разрешить данную проблему.
объявляешь до объявления класса что-нибудь типа
public delegate void ReturnObject(/*сюда пишешь параметры которые надо передать форме*/);
потом где-нибудь в классе главной форме объявляешь метод
void GetRefresh(/*сюда пишешь те же параметры что и в делегате*/)
{
/*сюда копируешь из метода Form_Load*/
}
в конструкторе вызываемой формы пишешь в списке параметров передаваемых конструктору что-то типа ReturnObject o
И объявляешь в классе второй формы переменную того же типа и в конструкторе запихиваешь туда ну например:
...
ReturnObject o;
public YourForm(ReturnObject o){
InitializeComponent();
this.o = o;
}
...
далее при закрытии формы в методе
Form_closing
вызываешь
o(/* передаёшь те параметры которые хотел вернуть главной форме*/)
и всё происходит как ты хотел
да не забудь в методе Form_Load вставить вызов процедуры вместо того что там было написано
а в вызове конструктора вставить ссылку на нужный метод например
YourForm yf = new YourForm(GetRefresh);
1) Просто объявить Form1_Load как internal а не как private. Тогда вызов из второй формы будет таким:
Код:
[SIZE=2][COLOR=#008080][FONT=Courier New]Form1[/FONT][/COLOR][/SIZE][FONT=Courier New][SIZE=2] mainForm = [/SIZE][SIZE=2][COLOR=#008080]Application[/COLOR][/SIZE][SIZE=2].OpenForms[[/SIZE][SIZE=2][COLOR=#800000]"Form1"[/COLOR][/SIZE][SIZE=2]] [/SIZE][SIZE=2][COLOR=#0000ff]as[/COLOR][/SIZE][SIZE=2] [/SIZE][SIZE=2][COLOR=#008080]Form1[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New];[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][SIZE=2] (mainForm != [/SIZE][SIZE=2][COLOR=#0000ff]null[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New])[/FONT]
[FONT=Courier New]{[/FONT]
[FONT=Courier New] mainForm.Form1_Load(sender, e);[/FONT]
[FONT=Courier New]}[/FONT]
[/SIZE]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][SIZE=2] (mainForm != [/SIZE][SIZE=2][COLOR=#0000ff]null[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New])[/FONT]
[FONT=Courier New]{[/FONT]
[FONT=Courier New] mainForm.Form1_Load(sender, e);[/FONT]
[FONT=Courier New]}[/FONT]
[/SIZE]
2) Используем Reflection, метод Form1_Load остаётся private:
Код:
[SIZE=2][COLOR=#008080][FONT=Courier New]Form[/FONT][/COLOR][/SIZE][FONT=Courier New][SIZE=2] mainForm = [/SIZE][SIZE=2][COLOR=#008080]Application[/COLOR][/SIZE][SIZE=2].OpenForms[[/SIZE][SIZE=2][COLOR=#800000]"Form1"[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New]];[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][SIZE=2] (mainForm != [/SIZE][SIZE=2][COLOR=#0000ff]null[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New])[/FONT]
[FONT=Courier New]{[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#008080]MethodInfo[/COLOR][/SIZE][SIZE=2] form1_Load = mainForm.GetType().GetMethod([/SIZE][SIZE=2][COLOR=#800000]"Form1_Load"[/COLOR][/SIZE][SIZE=2], [/SIZE][SIZE=2][COLOR=#008080]BindingFlags[/COLOR][/SIZE][SIZE=2].Instance | [/SIZE][SIZE=2][COLOR=#008080]BindingFlags[/COLOR][/SIZE][SIZE=2].DeclaredOnly | [/SIZE][SIZE=2][COLOR=#008080]BindingFlags[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New].NonPublic);[/FONT]
[FONT=Courier New]form1_Load.Invoke(mainForm, [/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]new [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]object[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New][] { sender, e });[/FONT]
[FONT=Courier New]}[/FONT]
[/SIZE]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][SIZE=2] (mainForm != [/SIZE][SIZE=2][COLOR=#0000ff]null[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New])[/FONT]
[FONT=Courier New]{[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#008080]MethodInfo[/COLOR][/SIZE][SIZE=2] form1_Load = mainForm.GetType().GetMethod([/SIZE][SIZE=2][COLOR=#800000]"Form1_Load"[/COLOR][/SIZE][SIZE=2], [/SIZE][SIZE=2][COLOR=#008080]BindingFlags[/COLOR][/SIZE][SIZE=2].Instance | [/SIZE][SIZE=2][COLOR=#008080]BindingFlags[/COLOR][/SIZE][SIZE=2].DeclaredOnly | [/SIZE][SIZE=2][COLOR=#008080]BindingFlags[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New].NonPublic);[/FONT]
[FONT=Courier New]form1_Load.Invoke(mainForm, [/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]new [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]object[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New][] { sender, e });[/FONT]
[FONT=Courier New]}[/FONT]
[/SIZE]