Есть главная форма, при нажатии на кнопку происходит открытие формы, в дочерней форме подгружается контрол. Вопрос заключается в следующем: Как передать из контрола в форму данные, закрыть ее, но при при закрытие формы выставить DialogResult.Ok и передать данные в родительскую форму, точнее вывести переданный текст в label и записать данные в переменную.
P.S. Кнопка закрытия формы находится в подключенном контроле.
В главной форме "Родительской форме" есть кнопка с помощью которой происходит открытие дочерней формы
private void btn_sel_driver_Click(object sender, EventArgs e)
{
get_driver gd = new get_driver(getIDkontr(id));
gd.ShowDialog();
if (gd.DialogResult == DialogResult.OK)
{
btn_sel_driver.Text = //Сюда должен вставится полученный текст из контрола
}
}
На дочерней форме есть элемент 'panel' в него загружается userControl
list_driver ld = new list_driver(pid);
content.Controls.Clear();
content.Controls.Add(ld);
В userControl находится кнопка с помощью которой должно произойти закрытие дочерней формы и передача данных в родительскую форму
private void btn_sel_driver_Click(object sender, EventArgs e)
{
get_driver gd = new get_driver(pid);
gd.DialogResult = DialogResult.OK;
gd.Close();
}
С закрытием формы решил вопрос вот таким образом.
driver_fio = string.Join(",", id);
Controls.Owner.FindForm().Close();
Controls.Owner.FindForm().DialogResult = DialogResult.OK;
Теперь как передать знание переменной driver_fio обратно в форму родителя? При закрытии формы ей присваивается значение null
Ну вам скорее всего придется добавить в родительскую форму свойства, которые вы хотите передать из UserControl'а.
В UserControl'е в конструкторе или каком-нибудь инициализирующем методе передавать ссылку на родительскую форму и перед закрытием записывать необходимые значения. В частном случае это будет выглядеть примерно так:
class A
{
public string MyProperty { get; set; }
public void Create()
{
var b = new B();
b.Show(this);
b.Close(); // После закрытия, в MyProperty будет значение Some Value
}
}
class B
{
private A a;
public void Show(A a)
{
this.a = a;
}
public void Close()
{
a.MyProperty = "Some Value";
}
}
Это должно решить вашу проблему
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости