簡體   English   中英

FormClosing 和 FormClosed 事件不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM