使用最少的代码,完成窗体关闭任务(注意,要有关闭提示)

winslow 2009-12-26 10:12:58
这个问题先提问了一次,因为我问题没有说清楚,导致大家误解,我重开一下,重说明一下情况.

有两个窗体,form1,form2,在form1中button1有一个单击的方法,弹出form2.我需要的是得到正确的 DialogResult .form1里的主要代码如下,从这里可以看出结果是否正确.
private void button1_Click(object sender, EventArgs e)
{
Form1 f2 = new Form2();
DialogResult dr = f2.ShowDialog();
if (dr == DialogResult.OK)
{
MessageBox.Show("OK");
}
else
MessageBox.Show("Cancel");
}


现在form2中有两个button,单击分别要返回如下结果.
private void button1_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.OK;
}

private void button2_Click(object sender, EventArgs e)
{
if (MessageBox.Show("确认退出", "确认", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) == DialogResult.OK)
{
this.DialogResult = DialogResult.Cancel;
}


}


在这里,点击button2要有提示的,也就是同意了之后,就返回 DialogResult.Cancel

最后需要的一点是,要在点击窗口的右上角的关闭时,也要有如 button2 的提示.如
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
if (MessageBox.Show("退出", "?", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) != DialogResult.OK) e.Cancel = true;

}
else
this.DialogResult = DialogResult.Cancel;



也就是说,最后我需要做的是得到正确的提示信息,并返回正确的结果.但是,目前的 this.DialogResult后会再次引发FormClosing事件.也就陷入了循环之中,那么,如何才能避免这问题并达到最终的效果呢?

我想了一天,想出了一个解决办法(N楼之后再帖).不知大家如何对付此问题.并使代码使用最少.
...全文
125 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
winslow 2010-01-01
  • 打赏
  • 举报
回复
我最后的实现代码如下.
        private void button1_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.OK;
}

private void button2_Click(object sender, EventArgs e)
{
this.Close();
}

private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
if(this.DialogResult == DialogResult.OK) return;
if (MessageBox.Show("退出", "?", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) != DialogResult.OK) e.Cancel = true;
}
biny101 2009-12-28
  • 打赏
  • 举报
回复

private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
if(this.DialogResult==DialogResult.OK||this.DialogResult==DialogResult.Cancel)
{
e.Cancel=true;
}
else if (MessageBox.Show("退出", "?", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) != DialogResult.OK)
this.DialogResult=DialogResult.OK;
e.Cancel = true;

}
else
{
this.DialogResult = DialogResult.Cancel;
e.Cancel=false;
}


jbo126 2009-12-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 winslow 的回复:]
注:不要使用全局变量来完成这个任务.
[/Quote]
对不起,你是想单击两个按钮(当然第二个要经过同意)后紧接着关闭窗体吗?还是紧紧设置后窗体关闭后返回的代码?
winslow 2009-12-26
  • 打赏
  • 举报
回复
注:不要使用全局变量来完成这个任务.
jbo126 2009-12-26
  • 打赏
  • 举报
回复
form2里声明一个全局变量
bool confirm=true;

将button1,button2的DialogResult分别设为OK和Cancel

在button1的单击事件里:confirm=false;

在formclosing里弹出提示:
if (confirm && MessageBox.Show("退出", "?", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) != DialogResult.OK) e.Cancel = true;
button2的事件处理程序去掉!


怎么样?
波导终结者 2009-12-26
  • 打赏
  • 举报
回复
你无非就是form1要弹出一个可以理解为自定义MessageBox的窗口form2,并要得到form2的选择结果,那就直接在form1里扔个public static变量,form2被closed的时候更改值即可

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧