在C#窗体中捕获关闭事件

3

嘿!我并不是想要冒昧,但我有另一个关于C#的问题。 我已经尝试了谷歌上找到的所有可能的事件。 以下是代码:

 private void Form1_OnClose()
        {
            MessageBox.Show("I was closed -2");
        }

        private void Form1_Exit(object sender, EventArgs evArgs)
        {
            MessageBox.Show("I was closed -1");         
        }
        private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            MessageBox.Show("I was closed 0");
        }     

        private void Form1_Closed(object sender, EventArgs e)
        {
            MessageBox.Show("I was closed 1");
        }
        private void Form1_FormClosed(Object sender, FormClosedEventArgs e)
        {

            MessageBox.Show("I was closed 2");
        }

当我按下Alt+f4或点击X按钮时,这些都没有触发任何操作。我做错了什么?

3个回答

14

你可能缺少实际的订阅代码,这样的代码大致如下:

this.Closing += Form1_Closing;

相反,尝试重写OnXXX方法 - 这是首选的做法。


但我也有一个加载事件,它会在没有其他任何东西的情况下发生,只有这个事件。 - AntonioCS
"Load" 事件必须由设计师连接。打开 "xxx.Designer.cs" 并查找 "this.Load += Form_Load;"。 - Anton Gogolev
我相信在窗体上双击会添加 this.Load += new EventHandler(Form1_Load); 或类似的代码到设计文件中。当我刚开始学习C#时,对此感到困惑。Form1_Closed 或其他名称并没有什么特别之处,只是设计师选择的名称而已。 - Davy8
除了默认事件以外的事件,如果您从属性窗格创建事件,VS将为您连接事件。否则,您必须自己完成连接。 - Powerlord
为此,您需要使用“+=”运算符而不是“=”。 - Misko
显示剩余5条评论

2
错误可能是您没有在正确的时间连接事件。请检查您的program.cs文件。它应该类似于这样:
using System;
using System.ComponentModel;
using System.Threading;
using System.Windows.Forms;
namespace Test
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            Form form = new Form2();
            form.Closing += form_Closing;
            Application.Run(form);
        }
        private static void form_Closing(object sender, CancelEventArgs e)
        {
            MessageBox.Show("Closing");
        }
    }
}

我刚才运行了这个代码,事件已经触发。


我想你是指FormClosing吧? - john k

1
这些方法是否实际分配为事件处理程序?进入设计模式,选择表单,然后单击属性窗口上方的小闪电图标。然后找到您想要的事件(可能是Closing),并双击它。

没有关闭事件,也没有退出事件 :( - AntonioCS
你可能没有选择表单本身。 - Misko
等等,我看到了一个FormClosed和一个FormClosing :) - AntonioCS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接