• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Как передать данные между формами в C#

BKeaton

Green Team
18.07.2018
204
335
BIT
41
Передача данных между формами в языке c#
В этой статье хочу показать один из возможных способов передачи данных между формами.

Передача данных между элементами формы
Задача будет следующая: на первой форме у нас будет элемент textbox, а на второй DataGridView и нам нужно будет сделать так, чтобы данные из одного элемента управления передавались в другой.

Создадим новое приложение типа Windows Forms Application. После чего добавим на первую форму два элемента управления: TextBox и Button.

27514


В окне Solution Explorer добавим вторую форму.

27515


27516


27517


Вторая форма
И так, для начала поработаем со второй формой.

Перейдите в окно ToolBox и добавьте на форму элемент управления DataGridView (dgv).

27518


Добавление свойств
Для дальнейшей работы нам понадобиться создать три свойства:

C#:
public partial class Form2 : Form
{
public string DgvValue { get; set; }
public int DgvRowIndex { get; set; }
public string DgvCellName { get; set; }
public Form2()
{
InitializeComponent();
}
}
Свойство DgvValue используется для получения и установки значения в ячейке элемента управления DataGridView.

Свойство DgvRowIndex — индекс строки в DataGridView.

Свойство DgvCellName — имя или название ячейки, в которую необходимо вставить значение из элемента textbox.

Добавление строк в DataGridView
Для данного примера мы создадим новый метод AddRowsToDgv, с помощью которого добавим в DataGridView две строки и два столбца (Name и Age).

О том, как добавить новую строку в DataGridView более подробно можно прочитать, перейдя по ссылке.

C#:
private void AddRowsToDgv()
{
//создаём две ячейки: Name и Age
dgv.Columns.Add("Name", "Имя");
dgv.Columns.Add("Age", "Возврат");
//создаём и добавляем две строки
dgv.Rows.Add();
dgv.Rows.Add();
}
результат на картинке ниже

27519


Передача значения в textBox
Из второй формы мы будем передать в элемент textBox выбранное нами значение ячейки в DataGridView. Передача будет происходить в момент закрытия второй формы.

Получить выбранное значение в элементе DataGridView можно разными способами, например с помощью события DataGridView_CellContentClick, которое возникает при клике на значении расположенном в ячейки.

27520

C#:
private void dgv_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
try
{
//получаем значение ячейки в DataGridView
DgvValue = dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Получение значения переданного из textbox
Теперь мы опишем часть, которая отвечает за получение данных из первой формы, то есть из элемента textbox.

Для начала подпишемся на событие Form2_Load.

В данном событии будет выполняться метод AddRowsToDgv, который создаст две строки в элементе DataGridView, а также здесь мы будем получать данные переданных из первой формы.

C#:
private void Form2_Load(object sender, EventArgs e)
{
//добавляем строки в DataGrdiView
AddRowsToDgv();
try
{
//устанавливаем полученное значение в DataGridView
dgv.Rows[DgvRowIndex].Cells[DgvCellName].Value = DgvValue;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
В качестве индекса строки и названия ячейки мы используем созданные нами свойства, чтобы на первой форме мы могли более точно определить, куда передать значение из элемента textbox.

Исходник
C#:
public partial class Form2 : Form
{
public string DgvValue { get; set; }
public int DgvRowIndex { get; set; }
public string DgvCellName { get; set; }
public Form2()
{
InitializeComponent();
}
private void AddRowsToDgv()
{
dgv.Columns.Add("Name", "Имя");
dgv.Columns.Add("Age", "Возврат");
dgv.Rows.Add();
dgv.Rows.Add();
}
private void dgv_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
try
{
DgvValue = dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void Form2_Load (object sender, EventArgs e)
{
AddRowsToDgv();
try
{
dgv.Rows[DgvRowIndex].Cells[DgvCellName].Value = DgvValue;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
Первая форма
Теперь поработаем с первой формой.

Данные из элемента textBox мы будем передавать во вторую форму, например при нажатии на кнопку, поэтому для начала подписываемся на событие Button_Click.

Установка значений свойств
Перед тем как передать данные во вторую форму установим значения для трёх свойств.

C#:
private void button1_Click(object sender, EventArgs e)
{
using (Form2 frm2 = new Form2())
{
//значение, которое будет передаваться из textbox
frm2.DgvValue = textBox1.Text;
//индекс строки
frm2.DgvRowIndex = 0;
//название ячейки
frm2.DgvCellName = "Name";
}
}
Событие FormClosed
Затем здесь же подписываемся на событие FormClosed. Сделаем мы это для того, чтобы, во-первых, отловить момент закрытия второй формы, а во-вторых, таким образом, мы сможем получить (на первой форме) переданное значение, которое затем установим в textbox.

C#:
private void button1_Click(object sender, EventArgs e)
{
//1. установка свойств
...
//2. подписываемся на событие закрытия второй формы
frm2.FormClosed += (closedSender, closedE) =>
{
//передаём значение из DataGridView в textbox
textBox1.Text = frm2.DgvValue;
};
}
Открытие второй формы
И последнее что нам осталось сделать, так это отобразить или открыть вторую форму. Сделать это можно с помощью метода Showлибо ShowDialog.

C#:
private void button1_Click(object sender, EventArgs e)
{
//1. установка свойств
...
//2. подписываемся на событие закрытия второй формы
...
//3. открытие второй формы
frm2.ShowDialog();
}
Полный исходник
C#:
private void button1_Click(object sender, EventArgs e)
{
using (Form2 frm2 = new Form2())
{
frm2.DgvValue = textBox1.Text;
frm2.DgvRowIndex = 0;
frm2.DgvCellName = "Name";
frm2.FormClosed += (closedSender, closedE) =>
{
textBox1.Text = frm2.DgvValue;
};
frm2.ShowDialog();
}
}
Теперь если запустить наше предложение и нажать на кнопку, расположенную на первой форме, то данные из textbox будут переданы во вторую форму в элемент DataGridView.

27521


Чтобы передать данные из второй формы нам нужно сначала выбрать значение в DataGridView, а затем просто закрыть форму. Либо можно, например, добавить на форму кнопку и передать данные с помощью неё.

Читайте также:
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!