我定义了以下方法以在表单关闭时调用
private void TimeKeeper_Closing(object sender, EventArgs e)
但是,当我尝试在表单属性的事件部分中分配它时,它不会显示在列表中。我需要做些什么才能让它出现在那里吗?
编辑:对不起,最初发布了错误的方法......
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 来简单地更改此处所做的决定。
您必须将 EventArgs 更改为 FormClosingEventArgs
private void TimeKeeper_Closing(object sender, FormClosingEventArgs e)