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关闭子窗体禁止程序退出

解决方案 »

  1.   

    visible为false时候不能触发事件吧...换个思路呗,识别线程什么的
      

  2.   

    Form2的FormClosing事件处理哈数里面判断Form1的实例的visible,如果为False,就直接调用Form1的FormClosing事件处理函数Form1_FormClosing(),但是你得把Form1_FormClosing()定义成public,如果不为false,他会自己触发Form1的FormClosing事件
      

  3.   

    ..额,只是个建议,把打印的全部过程写在一个线程里,单开一个打印的线程举个例子吧
    thread thprint = new Thread(new ThreadStart(print)); print就是你的打印方法  thprint.start();
    然后就能判断thprint对象有方法判断线程(打印)过程结没结束百度下多线程吧,希望对你有帮助
      

  4.   

    foreach (Form fr in this.MdiChildren)
                {
                    if (fr.Visible == false)
                    {
                        fr.Visible = true;
                        fr.Close();
                    }
                }我加入了这样一个判断之后,虽然会弹出子窗体关闭程序的消息,即运行了子窗体的关闭事件,但最后程序还是关闭了,请教怎么解决?
      

  5.   

    我现在是在每一个子窗体里都设置了公共按钮,父窗体关闭时只有所有子窗体的按钮是false时,e.Cancel=false.感觉不是太智能化。
      

  6.   

    在公共类里加变量
    public static List<string> IsClose=new List<string>();
    在每个要执行的代码里IsClose.dd(this.Name);
    完成时IsClose.Remove(this.Name);
    关闭程序时判断IsClose的Clount=0就关闭,否则提示有任务未完成。