我的主窗体的FormClosing事件里 打开一个新窗体 新窗体判断是否关闭(用的不是showmessage.box)新窗体是radiobutton 来选择
通过单步执行 看 代码
当选择了退出程序 子窗体隐藏 后面因为没有代码了 就回到 FormClosing 的 application.exit 方法
问题来了
当执行了 application.exit以后 代码又跳到了 FormClosing 里的第一行
是什么原因???? 死循环啦
通过单步执行 看 代码
当选择了退出程序 子窗体隐藏 后面因为没有代码了 就回到 FormClosing 的 application.exit 方法
问题来了
当执行了 application.exit以后 代码又跳到了 FormClosing 里的第一行
是什么原因???? 死循环啦
解决方案 »
- 同志们能给点思路吗
- [Help]常用路由器型号、默认WEB地址、用户名和密码有哪些?
- 在两个窗体之间共享Dataset的问题
- VS2005如何进行网络化设置
- System.web.mail.smtpmail
- 很急的难题啊,高手们进来帮忙解决一下,不解决就不睡觉了!
- GPS开发大讨论,主要关于网络和多线程
- 我怎么捕获不到Session的结束?分随少,相信大家不会介意!
- 打印的问题,请大家帮帮忙,多谢!
- 安装tfs出现问题
- ado.net的东西太多,难以把握要领和要点,想找到一些关于ado.net经常用到的精华部分,比如用代码建库表的常用类和方法属性,记录的插入、删除、更新等等,需要精通这方面的专家总结提供,不胜感激。(其他网友请不要说去学习vs的帮助)
- 新手用XmlReaderSettings 读XML文件。。。老是不行。请指教
private void button1_Click(object sender, EventArgs e)
{
if (m.Checked)//选择最小化
{
this.Dispose();//选择窗体关闭
Form1.i.Visible = false;//主窗体隐藏 }
else//选择退出
{
this.Dispose();//选择窗体关闭
Form1.ex = "1";
}
}
主窗体的:
public void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
quit q = new quit();
q.ShowDialog();
if (ex == "1")
{
notifyIcon1.Visible = false;
Application.Exit();
// MessageBox.Show("程序关闭");
}
{
quit q = new quit();
q.ShowDialog();
if (ex == "1")
{
notifyIcon1.Visible = false;
Application.Exit(); //此代码会产生死循环,引发各窗体的FormClosing事件及FormClosed事件,包括Form1
// MessageBox.Show("程序关闭");
}
1.主窗体Form1与调用的窗体中变量相互引用,容易引起混乱,应考虑使用Tag属性或其它方法储存用户的选择信息,并在Form1中读取该返回值。
2.不应在FormClosing事件中调用Application.Exit()方法,考虑枚举所有打开的窗口,并调用Close()方法关闭。
protected override void OnClosing(CancelEventArgs e)
{
DialogResult rt =
MessageBox.Show("Are you sure your are going to close the application?",
"Confirm",
MessageBoxButtons.YesNo);
if (rt == DialogResult.Yes) {
e.Cancel = false;
}
else {
e.Cancel = true;
}
base.OnClosing(e);
}其他情况可以照葫芦画瓢。
在一个窗体的FormClosing事件中调用Application.Exit()是极度不科学的打法,应该重新整理思路,使用其它办法。
一个标准的WinForm程序从开始到结束,应该是在Program.cs中控制,而不是在个别窗体中控制。楼主非要在FormClosing事件中结束应用程序的话,以下是变通的方法:
notifyIcon1.Visible = false;
//将Application.Exit使用其它方法替代
//Application.Exit();
foreach(Form frm in Application.OpenForms)
{
if (frm!=this)
frm.Close();
}
// 选择窗体:
private void button1_Click(object sender, EventArgs e)
{
if (m.Checked)// 选择最小化
this.DialogResult = DialogResult.Cancel;
else // 选择退出
this.DialogResult = DialogResult.OK;
Close();
}
// 主窗体的:
public void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
quit q = new quit();
e.Cancel=q.ShowDialog!=DialogResult.OK; // q.ShowDialog()结果不等于DialogResult.OK就e.Cancel=true中止关闭主窗口
}