FormClosing и FormClosed события не работают



Я разрабатываю приложение C#
И мне нужно сделать некоторые проверки, прежде чем пользователь закроет форму.



Я попытался использовать событие FormClosing, но это не сработало,
позже я использовал событие FormClosed, но то же самое.



Проблема в том, что когда я нажимаю кнопку "Закрыть" (в верхней части формы), она ничего не делает, но у меня есть события в свойствах формы и все такое.



Введите описание изображения здесьВведите описание изображения здесь



Вот мой код:



    private void Inicio_FormClosing_1(object sender, FormClosingEventArgs e)
{
//things I have to do
//...
//...

if(bandera==true)
Application.Exit();

}


И



    private void Inicio_FormClosed_1(object sender, FormClosingEventArgs e)
{
//things I have to do
//...
//...

if(bandera==true)
Application.Exit();

}


Любые идея?



Спасибо

1104   5  

5 ответов:

Оба события должны работать нормально. Просто откройте новый проект и выполните этот простой тест:

 private void Form1_Load(object sender, EventArgs e)
 {
     this.FormClosing += new FormClosingEventHandler(Inicio_FormClosing_1);
     this.FormClosed += new FormClosedEventHandler(Inicio_FormClosed_1);
 }

 private void Inicio_FormClosing_1(object sender, FormClosingEventArgs e)
 {
     //Things while closing

 }

 private void Inicio_FormClosed_1(object sender, FormClosedEventArgs e)
 {
     //Things when closed
 }

Если вы установите точки останова в этих методах, вы увидите, что они достигаются после нажатия кнопки закрытия. Похоже, что в вашем коде присоединения событий есть какая-то проблема. Например: Inicio_FormClosed_1(object sender, FormClosingEventArgs e) неверно, поскольку он должен принимать аргумент FormClosedEventArgs; и поэтому этот метод, безусловно, не связан с FormClosed event (в противном случае код не компилировался бы).

Чтобы запретить пользователю закрывать форму в ответ на определенные проверки, необходимо задать FormClosingEventArgs.Cancel = true.

Например:

private void Inicio_FormClosing_1(object sender, FormClosingEventArgs e)
{
    if (string.IsNullOrEmpty(txtSomethingRequired.Text))
    {
        MessageBox.Show("Something is required here!");
        if (txtSomethingRequired.CanFocus) txtSomethingRequired.Focus();
        e.Cancel = true;
        return;
    }
}

Вы можете выполнять проверки только в событии FormClosing, чтобы предотвратить закрытие формы; если вы ждете, пока FormClosed не станет слишком поздно.

Я нашел ошибку;

Здесь: (когда я инициализирую свою форму)

    public Inicio()
    {
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.AutoScroll = true;

        this.ClientSize = new System.Drawing.Size(635, 332);
        this.StartPosition = FormStartPosition.CenterScreen;
        llenaForm(nombreFormulario);
        Application.EnableVisualStyles();

    }

Все, что мне было нужно, это: InitializeComponent();
Я удалил по ошибке

Это должно быть:

    public Inicio()
    {
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.AutoScroll = true;`

        InitializeComponent();//<<<<<<<<------------------- 

        this.ClientSize = new System.Drawing.Size(635, 332);
        this.StartPosition = FormStartPosition.CenterScreen;
        llenaForm(nombreFormulario);
        Application.EnableVisualStyles();
    }

Большое вам спасибо, ребята!

Я заметил, что у вас есть "_1" в конце имен ваших методов. Вы переименовали эти методы?

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

Вы можете поставить точку останова в этих методах, чтобы увидеть, вызываются ли они.

Просто в качестве примечания, форма.Метод Hide () не вызывает события form_closed или form_closing

Comments

    Ничего не найдено.