日期:2014-05-17  浏览次数:21080 次

当子窗体还有任务在进行时不允许退出程序
VS2010
ChildForm:Form1
MDIForm:Form2
我的Form1在进行打印任务时,事件里面写了e.Cancel=true,直接关闭窗体是不可以关闭的
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (zt == true)
            {
                MessageBox.Show("打印任务还没有结束,禁止退出程序!", "正在进行打印BOM", MessageBoxButtons.OK, MessageBoxIcon.Error);
                e.Cancel = true;
                this.Visible = true;
            }
        }

当Form1在Form2中显示时,关闭Form2也是不允许关闭的
        private void Form2_FormClosing(object sender, FormClosingEventArgs e)
        {
            foreach (Form fr in this.MdiChildren)
            {
                if (!fr.IsDisposed)
                {
                    fr.Close();
                }
            }
        }

问题是下面:
当Form1.Visible=false;之后,关闭Form2时,调试发现不会执行Form1的Closing事件,程序仍然可以关闭,要怎么做不管Form1是否隐藏,都会执行Form1的Closing事件
vs2010 关闭子窗体 禁止程序退出

------解决方案--------------------
visible为false时候不能触发事件吧...换个思路呗,识别线程什么的
------解决方案--------------------
..额,只是个建议,把打印的全部过程写在一个线程里,单开一个打印的线程

举个例子吧
thread thprint = new Thread(new ThreadStart(print)); print就是你的打印方法  thprint.start();
然后就能判断thprint对象有方法判断线程(打印)过程结没结束

百度下多线程吧,希望对你有帮助
------解决方案--------------------
在公共类里加变量
public static List<string> IsClose=new List<string>();
在每个要执行的代码里IsClose.dd(this.Name);
完成时IsClose.Remove(this.Name);
关闭程序时判断IsClose的Clount=0就关闭,否则提示有任务未完成。