我正在玩一些非常简单的窗体.我有一个表单关闭事件的事件处理程序,询问用户是否要保存他们键入的内容:
private void closeNpForm(object sender, FormClosingEventArgs e)
{
if (!saveFlag)
{
if (MessageBox.Show("Do you want to save the text entered?", "Save Changes?", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
e.Cancel = true;
saveFlag = true;
writeToFile(this.allText.Text);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果用户单击是(表示他们确实要保存他们的文本),我调用writeToFile方法,并设置一个标志,以便不要求他们再次保存:
private void writeToFile(string text)
{
writer = new StreamWriter("inputdata.txt");
writer.Write(text);
writer.Close();
this.Close();
}
Run Code Online (Sandbox Code Playgroud)
据我所知,writeToFile方法应该在完成后关闭表单.但是这没有发生,当我运行writeToFile方法时,表单才会保持打开状态.谁能告诉我我做错了什么?
据我所知,调用this.Close()应该触发一个表单关闭事件,调用我的事件处理程序,由于该标志现在是真的,表单应该关闭没有问题.
请注意,我的父类扩展了Form类,所以我只是this用来引用我的表单实例.
小智 6
e.Cancel = true - 哎呀 该事件被告知取消(读:不关闭窗口).
我怀疑是因为close()从关闭事件中被调用,并且有一些内部的破坏正在进行(要么被抑制,要么Cancel被传播,等等).只需清理代码(保存到文件与关闭窗口无关,尽管文件可能已保存并且窗口在按钮事件中关闭.)
快乐的编码.