2010-06-25 4 views
5

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

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

Parent form > Opens child form 
Child gathers information > User clicks ok in child > child closes, parent closes 

^это то, что я хочу

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

Любая помощь будет высоко оценена. Собственно, это было бы очень оценено. Если бы я мог узнать, как заставить мои формы общаться друг с другом, я мог бы нанести большой урон (в хорошем смысле 8D).

ответ

1

Try это в родительской форме:

using (var childForm = new ChildForm()) 
{ 
    if (childForm.ShowDialog() == DialogResult.OK) 
    { 
     Close(); 
    } 
} 

Ваша форма ребенок должен вернуть DialogResult, нажав кнопку (OK или Cancel) и/или настройку свойств AcceptButton и CancelButton в конструкторе.

+0

Если дочерняя форма будет возвращать большую часть информации в родительскую форму, я предпочитаю, чтобы класс дочерней формы определял статический метод, который создает дочернюю форму, выполняет ShowDialog, копирует соответствующую информацию из него в возвращаемые данные объект, уничтожает форму и возвращает данные. В таком сценарии конструктор дочерней формы может быть защищен или, если класс не будет наследованным, частный. – supercat

+0

Я либо передаю бизнес-объект в дочернюю форму, и пусть он вносит изменения в объект или, как правило, раскрывает данные как свойство в дочерней форме. –

6

В родительской форме, вы можете сделать что-то вроде этого:

ChildForm f = new ChildForm(); 
f.FormClosed += (o,e) => this.Close(); 
f.Show(); 
+0

@Justin, я получаю делегата() не может принять 0 параметров ошибки ... – sooprise

+0

@BFree, ваше решение отлично работало, спасибо большое! : D – sooprise

+1

Это не позволяет пользователю отменить все, что они делают в дочерней форме. –