我有一个按钮点击事件处理程序,它说明了.Close()
在FormClosing事件中,我检测到未保存的更改并说出“您要保存吗?”
如果他们说是,我设置e.Cancel = true,然后调用我的Save方法。如果数据在我的Save方法中保存好,最后我说这个。关闭()但表单保持打开状态。
这似乎是一个简单的想法,但我无法解决。
我是否需要在FormClosing中创建新线程,所以如果他们说是设置e.Cancel = true并创建一个新线程来执行Save,然后调用this.Close()
答案 0 :(得分:3)
听起来你想做的不是将e.Cancel设置为true,而是从Save()
有条件地调用FormClosing
。您只有在保存失败时才会取消。例如:
private void OnFormClosing(object sender, System.ComponentModel.CancelEventArgs e)
{
if ( IsDataModified() ) // check if the data is unsaved...however you do so
{
// display a message asking the user to save changes or abort.
if(MessageBox.Show("Do you want to save your changes?",
"My Application",
MessageBoxButtons.YesNo) == DialogResult.Yes)
{
if( !SaveChanges(); )
e.Cancel = true; // save did not succeed!
}
}
}
答案 1 :(得分:2)
如果他们说是,我设置e.Cancel = true,然后调用我的Save方法。如果数据在我的保存方法中保存好,最后我说这个。关闭()但表格保持打开
改变这一点。
e.Cancel = !Save()
e.Cancel = true
这将使表单关闭,除非他们在提示时拒绝,或者Save()例程失败。不需要新的线程或线程,只需稍微修改逻辑。