在C#中,在窗体Form1关闭时,如果Form1中的数据没有完全保存,怎么阻止窗体Form1的关闭?在哪个事件下编写代码?

解决方案 »

  1.   

    在事件处理方法中,如果要阻止窗体关闭,执行
    e.Cancel = True;
      

  2.   

            private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
            {
                DialogResult drClose = MessageBox.Show("您确认退出吗?", "退出系统提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
                if (drClose == DialogResult.Cancel)
                    e.Cancel = true;
            }
      

  3.   

     private void MainFrom_FormClosing(object sender, FormClosingEventArgs e)
            {
                if (DialogResult.No == MessageBox.Show("是否退出当前程序?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information))
                {
                    e.Cancel = true;
                }
                else
                {
                    e.Cancel = false;
                }
            }private void MainFrom_FormClosed(object sender, FormClosedEventArgs e)
            {
                Application.Exit();
            }
      

  4.   

      bool IsFinished=false;//数据没有保存完毕数据保存方法
    {bool IsFinished=true;//保存完毕。
      bool IsFinished=false;//数据没有保存完毕}
      private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
      {
      if (IsFinished == false)
      e.Cancel = true;
      }
      

  5.   


            /// <summary>
            /// 数据是否保存完成
            /// </summary>
            bool m_IsFinished = false;
            /// <summary>
            /// 数据是否保存完成
            /// </summary>
            public bool IsFinished
            {
                get { return m_IsFinished; }
                set
                {
                    m_IsFinished = value;
                    if (m_IsFinished && IsFormClosed)//如果数据保存完成和窗体已经执行过关闭操作
                    {
                        this.Close();//自动关闭窗体
                    }
                }
            }        /// <summary>
            /// 窗体是否执行过关闭
            /// </summary>
            bool IsFormClosed = false;        /// <summary>
            /// 窗体关闭时发生(记得要加这个事件哦)
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void Form_FormClosing(object sender, FormClosingEventArgs e)
            {
                IsFormClosed = true;//设置窗体已经执行过关闭
                if (!IsFinished)//如果数据没有保存完成
                {
                    e.Cancel = true;//取消关闭事件
                }
            }当数据保存完成后设置属性   IsFinished = true;
      

  6.   

    这样不好,如果保存后再修改呢?IsFinished仍未true,除非还要监视修改,再把它设置为false,自找麻烦,何必呢?直接在Form_Closing事件中判断数据是否修改就可以了,关键就是你自己要判断是否修改了数据。
      

  7.   

    参考这个
    http://topic.csdn.net/u/20110721/14/90ded6e2-d841-4f4b-ae4a-d929b2b8fa6e.html