c# e.Cancel 问题

2025-03-13 19:06:25
推荐回答(4个)
回答1:

这样写。
//单击事件
//因为当this.Close()时会调用FormClosing事件。
//你弹框,然后this.Close(),又FormClosing,所以就两次。

private void button2_Click(object sender, EventArgs e)
{
this.Close();//会自动调用这个事件Form1_FormClosing
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
DialogResult d = MessageBox.Show("真的要退出本软件吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (d == DialogResult.Cancel)
e.Cancel = true;
}+=是给事件订阅方法,即当触发这个事件的时候就调用这个方法
=>这个是lambda表达式,前面的说这个基本不用,这是不对的,这个就像java中的匿名类一样,在这里实现的是匿名方法,有好处,也有坏处,好处就是代码更加简化,而且看上去清晰,坏处的话在我看来无非就是一个,不能多次调用,所以这个一般会用在需要使用到匿名方法的时候,当然C#还有很多可以声明匿名方法的方法,这只是其中之一,“{}”中的看得懂,方法中的代码。

回答2:

这样写。
//单击事件
//因为当this.Close()时会调用FormClosing事件。
//你弹框,然后this.Close(),又FormClosing,所以就两次。

private void button2_Click(object sender, EventArgs e)
{
this.Close();//会自动调用这个事件Form1_FormClosing
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
DialogResult d = MessageBox.Show("真的要退出本软件吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (d == DialogResult.Cancel)
e.Cancel = true;
}

回答3:

当然啊。。。FORMCLOSING事件是在关闭窗体的时候触发的。。你在APPLICATION.EXIT()的时候就触发了CLOSING事件。然后就执行了下面的代码。。当然是两次了。。。

回答4:

你都已经在 Form1_FormClosing 里写了提示了。
为什么还要在button_click里又写?
直接去掉一个就好了。