c# e.Cancel 问题
privatevoidbutton2_Click(objectsender,EventArgse){DialogResultc=MessageBox.Show("真的要退...
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);
可以
那还有其他办法吗? 展开
{
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);
可以
那还有其他办法吗? 展开
4个回答
展开全部
这样写。
//单击事件
//因为当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
}
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
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
DialogResult d = MessageBox.Show("真的要退出本软件吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (d == DialogResult.Cancel)
e.Cancel = true;
}
//单击事件
//因为当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;
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
当然啊。。。FORMCLOSING事件是在关闭窗体的时候触发的。。你在APPLICATION.EXIT()的时候就触发了CLOSING事件。然后就执行了下面的代码。。当然是两次了。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你都已经在 Form1_FormClosing 里写了提示了。
为什么还要在button_click里又写?
直接去掉一个就好了。
为什么还要在button_click里又写?
直接去掉一个就好了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询