#c# #winforms
#c# #winforms
Вопрос:
Добрый день, stackoverflow. Моя проблема здесь в том, что функция закрытия формы не реализуется сразу после закрытия формы. Но если я закрою форму, снова открою ее и снова закрою, функция Close_Form будет выполнена. Как я могу сделать это таким образом, чтобы после компиляции и запуска программы я мог сразу использовать метод close form? Пожалуйста, помогите.tnx
private Form2 ins = new Form2();
private void userManageLink_Click(object sender, EventArgs e)
{
ins.ShowDialog();
ins.FormClosing = new System.Windows.Forms.FormClosingEventHandler(Close_Form);
}
private void Close_Form(object sender, EventArgs e)
{
MessageBox.Show("Hello World");
}
Ответ №1:
Переместите назначение обработчика событий на перед вызовом ShowDialog() . Как только вы вызываете ShowDialog(), он не возвращается, пока форма не будет закрыта. К тому времени нет смысла устанавливать обработчик событий, потому что форма уже закрыта, и событие не будет запущено.
Комментарии:
1. Кроме того, вы, вероятно, не хотите назначать обработчик событий для каждого щелчка, вы начнете вызывать делегата несколько раз
2. @Matt: если на то пошло, просто каждый раз создавайте новый объект формы и удаляйте его. Это то, что я обычно делаю, вместо того, чтобы иметь нераспределенные объекты формы, лежащие в долгоживущих классах.
Ответ №2:
Проблема, вероятно, в том, что вы добавляете обработчик FormClosing после вызова ShowDialog . Отображается диалоговое окно, вы закрываете его, затем добавляете обработчик. Попробуйте добавить обработчик перед вызовом ShowDialog.