Это можно сделать с помощью событий. Этот подход особенно полезен, когда данные должны быть опубликованы, даже если дочерняя форма остается открытой.
Техника - из родительской формы, подписаться на ребенка от события. Выстрелить событие при закрытии дочерней формы, чтобы отправить данные
----- ОБРАЗЕЦ КОДА -----
Примечание. В родительской форме добавьте кнопку: button1
namespace WindowsFormsApplication2
{
public delegate void PopSaveClickedHandler(String text);
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Pops p = new Pops();
p.PopSaveClicked += new PopSaveClickedHandler(p_PopSaveClicked);//Subscribe
p.ShowDialog();
}
void p_PopSaveClicked(string text)
{
this.Text = text;//you have the value in parent form now, use it appropriately here.
}
}
Примечание. В всплывающей форме добавьте текстовое поле: txtUserName и кнопку: btnSave
namespace WindowsFormsApplication2
{
public partial class Pops : Form
{
public event PopSaveClickedHandler PopSaveClicked;
public Pops()
{
InitializeComponent();
}
private void btnSave_Click(object sender, EventArgs e)
{
if(PopSaveClicked!=null)
{
this.PopSaveClicked(txtUserName.Text);
}
}
}
}
Резюме:
1.Добавить делегата (место, где он доступен как родительской, так и дочерней форме):
public delegate void PopSaveClickedHandler(String text);
2.В форме: Pops, Добавить событие:
public event PopSaveClickedHandler PopSaveClicked;
3. Подписаться на мероприятие в родительской форме:
p.PopSaveClicked += new PopSaveClickedHandler(p_PopSaveClicked);
4. Вызвать событие в форме: всплывающее нажатие кнопки Сохранить
if(PopSaveClicked!=null)
{
this.PopSaveClicked(txtUserName.Text);
}