#c# #forms #event-handling
#c# #формы #обработка событий
Вопрос:
В моем приложении на C # у меня есть следующий метод, который вызывается при закрытии основной формы.
private void FormMain_Closing(object sender, FormClosingEventArgs e)
{
// Show this dialog when the user tries to close the main form
Form testForm = new FormTest();
testForm.StartPosition = FormStartPosition.CenterParent;
testForm.ShowDialog();
}
Это создает диалоговое окно, которое покажет, когда закрывается основная форма. Однако моя проблема заключается в том, что когда пользователь закрывается testForm
, основная форма закрывается сразу после этого. Я перепробовал всевозможные варианты e.Cancel = true;
и тому подобное, и все еще не могу отменить закрытие основной формы.
Есть идеи?
Редактировать: похоже, я столкнулся с проблемой, используя два ShowModal()
‘s подряд. Изучаю проблему…
Редактировать: использовалось this.DialogResult = DialogResult.None;
и, похоже, устранило мою проблему. По-видимому, это известная проблема в WinForms при открытии модального диалога из модального диалога.
Комментарии:
1. Я предлагаю вам поместить свое решение в
answer
дополнение к вашемуquestion
и пометить его как правильный ответ. Таким образом, другие люди будут знать, что на этот вопрос уже дан ответ, а также увидят, что вы сделали для решения проблемы.
Ответ №1:
У меня этот код отлично работает. Я думаю, что проблема в другой части вашего кода.
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
Form testForm = new FormTest();
testForm.StartPosition = FormStartPosition.CenterParent;
testForm.ShowDialog();
e.Cancel = testForm.DialogResult == DialogResult.Cancel;
}
Ответ №2:
Это также может быть обработано дочерними элементами из документов:
Если у формы есть какие-либо дочерние или принадлежащие формы, для каждой из них также вызывается событие FormClosing. Если какая-либо из форм отменяет событие, ни одна из форм не закрывается. Поэтому соответствующие события FormClosed не отправляются ни в одну из форм.
Ответ №3:
Я знаю, что вы упоминаете в своем вопросе, что пытались использовать ‘e.Отмена = true;’ Однако следующий код работает в моей среде (.NET 4.0, Visual Studio 2010, Windows 7):
private void Form1_FormClosing(object sender, FormClosingEventArgs e) {
// Show this dialog when the user tries to close the main form
Form testForm = new FormTest();
testForm.StartPosition = FormStartPosition.CenterParent;
testForm.ShowDialog();
e.Cancel = true;
}
Если в вашем случае это не сработает, возможно, у вас работают другие обработчики событий. В таком случае попробуйте этот код во вновь созданном приложении Windows Forms.
Комментарии:
1. Кроме того, .NET 4.6 по сравнению С 2015 годом выигрывает 7 (спустя почти 6 лет вы получаете право голоса «за» 🙂 Обратите внимание, что вам нужно отслеживать результаты любых дочерних форм, которые были открыты.