我定义了在表单关闭时调用的以下方法
private void TimeKeeper_Closing(object sender, EventArgs e)
但是,当我尝试在“表单”属性的“事件”部分中分配它时,它不会显示在列表中。我需要做些什么来让它出现在那里吗?
编辑:抱歉,最初发布了错误的方法......答案 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)