Доступ к основной форме из дочерней формы - PullRequest
5 голосов
/ 26 марта 2011

У меня есть простая проблема: у меня есть основная форма в win-forms / c #.Он имеет список, связанный с базой данных.

Когда я нажимаю кнопку, создается новая форма.

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

Возможно ли это?

Ответы [ 2 ]

15 голосов
/ 26 марта 2011

Есть много способов добиться этого, но вот простой способ.В вашей основной форме, когда вы создаете и показываете дочернюю форму, сделайте это следующим образом:

ChildForm child = new ChildForm();
child.Show(this); // this calls the override that takes Owner parameter

Затем, когда вам нужно вызвать метод в главной форме из дочерней формы, используйте такой код:(предполагается, что ваша основная форма имеет тип MainForm):

MainForm parent = (MainForm)this.Owner;
parent.CallCustomMethod();

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

6 голосов
/ 26 марта 2011

Сценарий 1: вызов метода в родительской форме по нажатию кнопки в дочерней форме.

Создайте Event в дочерней форме. Вызовите это событие при нажатии кнопки и т. Д. Подпишитесь на это событие в родительской форме и вызовите внутри него метод родительской формы.

Сценарий 2. Вызов метода в родительской форме, когда дочерняя форма закрыта.

Обработайте событие FormClosed или FormClosing дочерней формы в родительской форме и вызовите внутри него метод родительской формы.

ChildForm frm = new ChildForm();
frm.FormClosed += new FormClosedEventHandler(frm_FormClosed);

void frm_FormClosed(object sender, FormClosedEventArgs e)
    {
        //Call your method here.
    }
...