Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Обновление содержимого формы //C#

9.0K
06 апреля 2007 года
EuGenius
48 / / 12.01.2007
Доброе время суток.
Проблема такова.
Есть форма, содержимое которой заполняется в методе
 
Код:
private void Form1_Load(object sender, EventArgs e)

При нажатии на кнопку на этой форме открывается новая форма (диалог) поверх предыдущей.
После выхода из этого диалогового окна необходимо обновить содержимое первого окна.
Точнее сказать выполнить код, находящийся в методе Form1_Load.
Подскажите, как разрешить данную проблему.
26K
06 апреля 2007 года
Stapu
12 / / 06.04.2007
я бы воспользовался делегатом

объявляешь до объявления класса что-нибудь типа
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);
273
06 апреля 2007 года
3A3-968M
1.2K / / 22.12.2005
Если я правильно понял, то тебе нужно выполнить Form1_Load из формы Form2. Тут два метода, один простой но не совсем правильный с точки зрения проектирования ПО, другой чуть сложнее но не противоречит канонам GUI.
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]

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]
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог