none
如何防止勿關視窗 RRS feed

  • 問題

  • 我想做一個功能是假設使用者不小心按到視窗右上方的X,
    跳出一個messagebox來確認使用者是否真的要關閉視窗,
    選『是』的話就結束程式(到這邊都還會寫),
    但是若使用者按下『否』,該如何讓視窗不要關閉呢?
    我是在Form Closing寫了這個function:

     

     private void Test_FormClosing(object sender, FormClosingEventArgs e)
            {
                DialogResult result;
                result = MessageBox.Show("確定離開本系統?", "離開", MessageBoxButtons.YesNo ,    MessageBoxIcon.Question);
                if (result == DialogResult.Yes)
                {
                    Thread.Sleep(500);
                    Application.DoEvents();
                    MessageBox.Show("您已經離開本系統!", "提示訊息");
                    Application.Exit();
                }
                else
                {
                    //這邊不知道該怎麼寫?!
                }
            }

    2007年6月25日 上午 10:37

解答

  • e.Cancel = true;
    2007年6月25日 上午 10:40
  • Code Snippet
    private void Test_FormClosing(object sender, FormClosingEventArgs e)
    {
        DialogResult result;
        result = MessageBox.Show("確定離開本系統?", "離開", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
        if (result == DialogResult.Yes)
        {
            Thread.Sleep(500);
            Application.DoEvents();
            MessageBox.Show("您已經離開本系統!", "提示訊息");
            Application.Exit();
        }
        else
        { 
            e.Cancel = true;
        }
    }

     


    2007年6月25日 上午 10:42
    版主

所有回覆

  • e.Cancel = true;
    2007年6月25日 上午 10:40
  • Code Snippet
    private void Test_FormClosing(object sender, FormClosingEventArgs e)
    {
        DialogResult result;
        result = MessageBox.Show("確定離開本系統?", "離開", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
        if (result == DialogResult.Yes)
        {
            Thread.Sleep(500);
            Application.DoEvents();
            MessageBox.Show("您已經離開本系統!", "提示訊息");
            Application.Exit();
        }
        else
        { 
            e.Cancel = true;
        }
    }

     


    2007年6月25日 上午 10:42
    版主
  • 非常感謝兩位的回覆,問題已經解決了,

    不過想在請問,當我改成下面那樣寫之後,

     如果真的要離開系統,卻會出現兩次對話方框,

     就是變成要按兩次『是』才能離開,請問是那邊沒寫好嗎?

     
    Code Snippet
          private void TEST_FormClosing(object sender, FormClosingEventArgs e)
            {
                DialogResult result;
                result = MessageBox.Show("確定離開本系統?", "離開", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (result == DialogResult.Yes)
                {
                    Thread.Sleep(500);
                    Application.DoEvents();
                    MessageBox.Show("您已經離開本系統!", "提示訊息");
                    Application.Exit();
                }
                else
                {
                    e.Cancel = true;
                }

     

    2007年6月25日 上午 10:53
  • Code Snippet
    private void TEST_FormClosing(object sender, FormClosingEventArgs e)
            {
                if (DialogResult.Yes==MessageBox.Show("確定離開本系統?", "離開", MessageBoxButtons.YesNo, MessageBoxIcon.Question))
                {
                    Thread.Sleep(500);
                    Application.DoEvents();
                    MessageBox.Show("您已經離開本系統!", "提示訊息"); //這一行可以拿掉吧??不拿掉就是第二個Dialog
                    Application.Exit();
                }
                else
                {
                    e.Cancel = true;
                }

     

    2007年6月25日 下午 01:01
  •  

     

    結果一樣耶

    不過我改成  Application.ExitThread(); 就可以了....

    不過不懂為什麼Application.Exit()卻不可以...

     

    感謝各位的回答!

    2007年6月26日 上午 06:34