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();
}
Любые идея?
Спасибо
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" в конце имен ваших методов. Вы переименовали эти методы?
Если это так, ваш код пользовательского интерфейса(файл конструктора) должен быть обновлен с помощью этих новых имен методов.
Вы можете поставить точку останова в этих методах, чтобы увидеть, вызываются ли они.
Comments