Передача параметров между формами в C#
Часто возникает необходимость передать определённые параметры между формами в одном приложении, например значения каких либо переменных, или запустить какую либо процедуру или функцию в другой форме. Здесь я расскажу о двух методах решения этой задачи. Описанные методы использую сам, поэтому и публикую. Первый метод попроще, второй посложнее но более универсальный и с большими возможностями.
Способ №1
Передача параметров, используя связь между формами. (этот метод назвал я так сам — может есть и научное название).
Здесь всё довольно просто. Предположим из главной формы мы запускаем другую форму, от которой впоследствии хотим получить какие либо данные, или желаем позволить вновь созданной форме выполнить какие либо действия с первой. То сделать мы это можем так:
В главной форме (родительской) запуск новой производим вот таким образом:
FormNew frm = new FormNew();
frm.Owner = this; //Передаём вновь созданной форме её владельца.
frm.Show();
После такого действия в новой форме мы можем обращаться к элементам родительской формы, вот так:
FormMain frm = (FormMain)this.Owner;
frm.MyFunc(); //MyFunc - это ваша функция основной формы.
Вот собственно и весь способ, можно им также передавать и просто переменные, но в случае когда надо связать не две формы а множество, или сложно проследить родство между формами, проще сделать вторым методом.
Способ №2
По событиям (Делегаты)
1. Создаём в основном namespace (это в файле program.cs) класс:
public static class CallBackMy
{
public delegate void callbackEvent(string what);
public static callbackEvent callbackEventHandler;
}
2. Далее добавляем в форму приёмник (их может быть и несколько — что очень удобно):
public FormMy()
{
// Добавляем обработчик события - который запустит функцию Reload
CallBackMy.callbackEventHandler = new CallBackMy.callbackEvent(this.Reload);
InitializeComponent();
}
void Reload(string param)
{
//Здесь чего нибудь делаем.
//Это непосредственно то что выполнится по событию.
}
3. В форме источнике генерируем событие (там где это нам нужно).
CallBackMy.callbackEventHandler("Передаваемые данные.");
Таким способом можно обмениваться данными между формами и запускать процедуры и функции в других формах, без всякой связи между самими формами. При этом можно заставить множество схожих форм выполнить одинаковые операции, что удобно.