Многие, кто начинал изучение WinForm приложений, сталкивались с проблемой обмена данными между окнами программы. Обмен данными между формами сводится к трем основным принципам: передача параметров в форму, получение данных из формы, изменение значений другой формы. Начнем по порядку.
1) Передача параметров в форму. Любой класс, должен иметь конструктор, и WinForm в этом случае не исключение. А следовательно очевидным является тот факт, что передача данных необходимых для инициализации формы необходимо проводить именно через конструктор формы. Приведем пример.
Создадим WinForm и перейдем к коду. Наблюдаем следующую картину:
public partial class Form1 : Form { public Form1() // <-- Конструктор формы по умолчанию { InitializeComponent(); } }
Допустим на данной форме размещен элемент textBox в который мы хотим установить значение, при открытии нашей формы. Тогда модифицируем наш код следующим образом:
public partial class Form1 : Form { public Form1() { InitializeComponent(); } public Form1(string text) // <-- Новый конструктор формы { InitializeComponent(); textBox.Text = text; } }
Важно: Все действия, выполняемые с объектами формы должны быть произведены после функции InitializeComponent()!
2-3) По сути задача получения данных из формы и изменение данных в форме сводистя к одной задаче. Пусть у нас есть две формы Form1 и Form2. В первой форме у нас есть три кнопки: open, read, write . Первая откроет вторую форму, в которой есть элемент textBox, Вторая покажет сообщение с текстом, введенным в textBox формы номер два, третья очистит textBox из Form2. Имеем:
public partial class Form1 : Form { private Form2 F2 = new Form2(); //<--Объявляем форму два как элемент класса формы один public Form1() { InitializeComponent(); } private void open_Click(object sender, EventArgs e) { F2.ShowDialog(); } private void read_Click(object sender, EventArgs e) { MessageBox.Show(F2.textBoxValue); } private void write_Click(object sender, EventArgs e) { F2.textBoxValue = String.Empty; } } public partial class Form2 : Form { public string textBoxValue //<--Данная конструкция позволяет получить доступ //к private элементам формы { get { return textBox.Text; } set { textBox.Text = value; } } public Form2() { InitializeComponent(); } }
Вот и все. Оказалось не все так сложно 😉