0

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

private void TimeKeeper_Closing(object sender, EventArgs e)

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

编辑:对不起,最初发布了错误的方法......

4

2 回答 2

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 来简单地更改此处所做的决定。

于 2013-09-08T21:33:51.087 回答
0

您必须将 EventArgs 更改为 FormClosingEventArgs

private void TimeKeeper_Closing(object sender, FormClosingEventArgs e)
于 2013-09-08T20:19:14.077 回答