c# e.Cancel 问题

来源:百度知道 编辑:UC知道 时间:2024/06/20 18:56:31
private void button2_Click(object sender, EventArgs e)
{
DialogResult c = MessageBox.Show("真的要退出本软件吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (c == DialogResult.OK)
Application.Exit();
}

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

当这两段代码同时写的时候,为什么在button1_click 事件中
对话框要弹出两次才能关闭窗体?请多多指教!
那该如何写啊!
好像把
Application.Exit();
换成
Environment.Exit(0);
可以
那还有其他办法吗?

这样写。
//单击事件
//因为当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#还有很多可以声明匿名方法的方法,这只是其中之一,“{}”中的看得懂,方法中的代码。

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

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

privat