0

我试图在关闭程序之前检测用户是否保存了他们的工作。我尝试了以下编码:

void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    if (e.CloseReason == CloseReason.UserClosing)
        MessageBox.Show("Unsave Work");
}

但它不起作用。当我关闭程序时没有任何反应。

4

3 回答 3

5

在 .Net 中添加 EventHandler 有两种主要方法。

您可以使用设计器添加它。

在此处输入图像描述

或者你可以在代码中添加它

public Form1()
{
    InitializeComponent();
    this.FormClosing+=new FormClosingEventHandler(Form1_FormClosing);
}

void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    if (e.CloseReason == CloseReason.UserClosing)
    {
        var result = MessageBox.Show("Unsave Work", "", MessageBoxButtons.OKCancel);
        if (result == DialogResult.Cancel)
            e.Cancel = true;      
    }
} 
于 2012-07-20T05:48:37.957 回答
3

请首先将您的 Formclosing 函数绑定到 FormClosing 事件。

然后像下面这样检查:

 void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (e.CloseReason == CloseReason.UserClosing)
                {
                  if(work not saved)//Check your condition
                   {
                     MessageBox.Show("Unsave Work");
                     e.Cancel = true;
                    }
                }
        }
于 2012-07-20T05:34:06.693 回答
0

像这样问用户:

if (MessageBox.Show("Would you like to save your work", "Save work", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                SaveWork();
            }

如果您有办法检测用户是否首先保存了工作,那就更好了:

if (!IsWorkSaved())
            {
                if (MessageBox.Show("Would you like to save your work", "Save work", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    SaveWork();
                }
            }
于 2012-07-20T05:33:00.653 回答