Многие, кто начинал изучение 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();
}
}
Вот и все. Оказалось не все так сложно 😉