Возврат DialogResult из дочерней формы, на которую есть ссылка в родительском проекте Form

В решении для нескольких проектов у меня был стартовый проект WinForms с 2 формами, ожидая DialogResult всякий раз, когда показывали, что детская форма продолжает исполняться в моей основной форме.

var form2 = new ThisNameSpace.FormChild();
var dResult = form2.ShowDialog(this);

if(dResult == DialogResult.OK)
{
    // Do some work
}
else
{
    // Do other work
}

По какой-то причине мне пришлось перенести дочернюю форму в другой проект. Я ссылался на dll нового проекта в моем основном проекте запуска формы, но теперь я не могу вернуть результат диалога. Когда моя детская форма закрывает FormClosing Событие основной формы поднимается с CloseReason.None и приложение выходит. Как я могу обойти это?

1 ответ

Вы не должны поднимать FormClosing событие, и вы не должны писать какой-либо пользовательский код, чтобы просто закрыть диалог.

Вместо этого сделайте это:

  • на кнопку ОК в дочерней форме, установите DialogResult собственность на OK
  • на вашей детской форме, установите набор Accept Button свойство указывать на вашу кнопку ОК

это все, что вам нужно, чтобы закрыть окно, и вернется правильный DialogResult.

Если вам когда-либо понадобится закрыть его "вручную" (а это редко для модальных диалогов, то есть тех, которые открываются с помощью ShowDialog вместо Show), используйте Close метод.

Другие вопросы по тегам