将Form1_Closing方法分配给Form Closing Event

时间:2013-09-08 20:13:56

标签: c# winforms

我定义了在表单关闭时调用的以下方法

private void TimeKeeper_Closing(object sender, EventArgs e)

但是,当我尝试在“表单”属性的“事件”部分中分配它时,它不会显示在列表中。我需要做些什么来让它出现在那里吗?

编辑:抱歉,最初发布了错误的方法......

2 个答案:

答案 0 :(得分:4)

Closing事件已过时,它的日期是.NET 1.x.微软那个非常糟糕,并且在.NET 2.0中用FormClosing事件替换了它。这告诉你更多关于为什么表单被关闭的信息。 e.CloseReason非常重要,您不希望阻止Windows关闭。

这就是为什么你找不到它,你不应该再使用它了。请注意您接受的答案如何阻止您的程序编译。您可能自己发现了FormClosing事件。

不妨全力以赴,并指出一个班级听自己的事件是多么愚蠢。事件适用于其他代码。它们在设计器中工作得很好,这就是为什么你最终编写这样的代码。但理智的做法是重写方法:

    protected override void OnFormClosing(FormClosingEventArgs e) {
        if (e.CloseReason == CloseReason.UserClosing) {
            // Some code that might set e.Cancel = true
            //...
        }
        base.OnFormClosing(e);
    }

除了忘记与设计师订阅事件的典型损失之外,它有许多优点,派生类可以通过将e.Cancel设置回true来简单地改变在此做出的决定。

答案 1 :(得分:0)

您必须将EventArgs更改为FormClosingEventArgs

private void TimeKeeper_Closing(object sender, FormClosingEventArgs e)