[英]FormClosing and FormClosed events do not work
我正在開發一個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();
}
任何的想法?
謝謝
這兩個事件都應該正常工作。 只需打開一個新項目並進行這個簡單的測試:
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
(否則,代碼將無法編譯)。
我發現了錯誤;
這里:(當我初始化我的表單時)
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();
}
十分感謝大家!
為了防止用戶關閉表單以響應某些驗證,您需要設置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
已經太晚了。
我注意到您的方法名稱末尾有一個“_1”。 你重命名了這些方法嗎?
如果是這樣,您的 UI 代碼(設計器文件)將需要使用這些新方法名稱進行更新。
您可以在這些方法中放置一個斷點以查看它們是否被調用。
作為旁注,Form.Hide() 方法不會引發 form_closed 或 form_closed 事件
我也遇到了類似的問題,它是由使用Dispose()
引起的。 確保您使用Close()
來引發關閉/關閉事件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.