Закрытие формы в c#

#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.