Передача данных между формами в языке c#
В этой статье хочу показать один из возможных способов передачи данных между формами.
Передача данных между элементами формы
Задача будет следующая: на первой форме у нас будет элемент textbox, а на второй DataGridView и нам нужно будет сделать так, чтобы данные из одного элемента управления передавались в другой.
Создадим новое приложение типа Windows Forms Application. После чего добавим на первую форму два элемента управления: TextBox и Button.
В окне Solution Explorer добавим вторую форму.
Вторая форма
И так, для начала поработаем со второй формой.
Перейдите в окно ToolBox и добавьте на форму элемент управления DataGridView (dgv).
Добавление свойств
Для дальнейшей работы нам понадобиться создать три свойства:
Свойство DgvValue используется для получения и установки значения в ячейке элемента управления DataGridView.
Свойство DgvRowIndex — индекс строки в DataGridView.
Свойство DgvCellName — имя или название ячейки, в которую необходимо вставить значение из элемента textbox.
Добавление строк в DataGridView
Для данного примера мы создадим новый метод AddRowsToDgv, с помощью которого добавим в DataGridView две строки и два столбца (Name и Age).
О том, как добавить новую строку в DataGridView более подробно можно прочитать, перейдя по ссылке.
результат на картинке ниже
Передача значения в textBox
Из второй формы мы будем передать в элемент textBox выбранное нами значение ячейки в DataGridView. Передача будет происходить в момент закрытия второй формы.
Получить выбранное значение в элементе DataGridView можно разными способами, например с помощью события DataGridView_CellContentClick, которое возникает при клике на значении расположенном в ячейки.
Получение значения переданного из textbox
Теперь мы опишем часть, которая отвечает за получение данных из первой формы, то есть из элемента textbox.
Для начала подпишемся на событие Form2_Load.
В данном событии будет выполняться метод AddRowsToDgv, который создаст две строки в элементе DataGridView, а также здесь мы будем получать данные переданных из первой формы.
В качестве индекса строки и названия ячейки мы используем созданные нами свойства, чтобы на первой форме мы могли более точно определить, куда передать значение из элемента textbox.
Исходник
Первая форма
Теперь поработаем с первой формой.
Данные из элемента textBox мы будем передавать во вторую форму, например при нажатии на кнопку, поэтому для начала подписываемся на событие Button_Click.
Установка значений свойств
Перед тем как передать данные во вторую форму установим значения для трёх свойств.
Событие FormClosed
Затем здесь же подписываемся на событие FormClosed. Сделаем мы это для того, чтобы, во-первых, отловить момент закрытия второй формы, а во-вторых, таким образом, мы сможем получить (на первой форме) переданное значение, которое затем установим в textbox.
Открытие второй формы
И последнее что нам осталось сделать, так это отобразить или открыть вторую форму. Сделать это можно с помощью метода Showлибо ShowDialog.
Полный исходник
Теперь если запустить наше предложение и нажать на кнопку, расположенную на первой форме, то данные из textbox будут переданы во вторую форму в элемент DataGridView.
Чтобы передать данные из второй формы нам нужно сначала выбрать значение в DataGridView, а затем просто закрыть форму. Либо можно, например, добавить на форму кнопку и передать данные с помощью неё.
Читайте также:
В этой статье хочу показать один из возможных способов передачи данных между формами.
Передача данных между элементами формы
Задача будет следующая: на первой форме у нас будет элемент textbox, а на второй DataGridView и нам нужно будет сделать так, чтобы данные из одного элемента управления передавались в другой.
Создадим новое приложение типа Windows Forms Application. После чего добавим на первую форму два элемента управления: TextBox и Button.
В окне Solution Explorer добавим вторую форму.
Вторая форма
И так, для начала поработаем со второй формой.
Перейдите в окно ToolBox и добавьте на форму элемент управления DataGridView (dgv).
Добавление свойств
Для дальнейшей работы нам понадобиться создать три свойства:
C#:
public partial class Form2 : Form
{
public string DgvValue { get; set; }
public int DgvRowIndex { get; set; }
public string DgvCellName { get; set; }
public Form2()
{
InitializeComponent();
}
}
Свойство 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();
}
Передача значения в textBox
Из второй формы мы будем передать в элемент textBox выбранное нами значение ячейки в DataGridView. Передача будет происходить в момент закрытия второй формы.
Получить выбранное значение в элементе DataGridView можно разными способами, например с помощью события DataGridView_CellContentClick, которое возникает при клике на значении расположенном в ячейки.
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.
Для начала подпишемся на событие 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);
}
}
Исходник
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. Сделаем мы это для того, чтобы, во-первых, отловить момент закрытия второй формы, а во-вторых, таким образом, мы сможем получить (на первой форме) переданное значение, которое затем установим в 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();
}
}
Чтобы передать данные из второй формы нам нужно сначала выбрать значение в DataGridView, а затем просто закрыть форму. Либо можно, например, добавить на форму кнопку и передать данные с помощью неё.
Читайте также: