我正在使用此代码,但它不起作用,我做错了什么?
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (MessageBox.Show("This will close down the whole application. Confirm?", "Close Application", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
MessageBox.Show("The application has been closed successfully.", "Application Closed!", MessageBoxButtons.OK);
}
else
{
e.Cancel = true;
this.Activate();
}
}
答案 0 :(得分:4)
我猜你从某个地方复制了这段代码而忘了实际订阅FormClosing事件。在C#中常见的陷阱,VB.NET使用Handles关键字来避免这样的错误。选择表单,单击“属性”窗口中的闪电图标,然后双击“FormClosing”以添加订阅该事件的代码。
也就是说,编写这样的代码实际上没有意义。事件是其他代码来获取通知,类不必监听其自己的事件。在Winforms中,每个事件都由您可以覆盖的受保护的OnXxxx()方法触发。您可以剪切并粘贴下面的代码并落入成功的范围,它不需要任何额外的代码,如事件订阅代码。最重要的是,它首先优先考虑自定义事件处理程序,还有你还不知道的代码类型,并且应该首先处理通知。
protected override void OnFormClosing(FormClosingEventArgs e) {
base.OnFormClosing(e);
if (!e.Cancel) {
if (MessageBox.Show("Really?", "Close", MessageBoxButtons.YesNo) != DialogResult.Yes) {
e.Cancel = true;
}
}
}
答案 1 :(得分:0)
事件处理程序是否附加到表单?要检查,请转到表单属性,然后转到事件选项卡,看看FormClosing事件是否存在Form1_FormClosing。
答案 2 :(得分:0)
如果已使用 FormName.ShowDialog()打开此表单,则在 FormClosing 事件中,仅设置 e.Cancel = True。
您需要将 FormName.DialogResult 设置为 DialogResult.None ,如MSDN