当窗口关闭时运行代码
问题描述:
我相信当在C#中的Windows窗体应用程序中按下关闭按钮时,可以运行代码。它是主窗口的一个子窗体。我想在用户关闭窗口时保存一些用户设置。当窗口关闭时运行代码
private void fileTypeDialog_FormClosing(Object sender, FormClosingEventArgs e)
{
int ArraySize = fileTypesData.Items.Count;
string[] fileTypesToSaveArray = new string[ArraySize];
for (int i = 0; i < ArraySize; i++)
{
fileTypesToSaveArray[i] = fileTypesData.Items[i].ToString();
}
string fileTypesToSave = String.Join(",", fileTypesToSaveArray);
MessageBox.Show(fileTypesToSave.ToString());
Properties.Settings.Default.fileTypes = fileTypesToSave;
Properties.Settings.Default.Save();
}
我以前做过这个,但我想不到,但我根本记不清我是怎么做到的。你们能帮助我吗?
答
你的事件不接线。如果不创建与设计师的事件,那么你需要手动添加,一般在构造函数中:
public Form1() {
InitializeComponent();
this.FormClosing += fileTypeDialog_FormClosing;
}
但形式不应该听自己的事件,因为它可以访问其受保护的事件方法。因此,只需开始输入“覆盖OnForm”并从intellisense中选择“OnFormClosing”即可。您的代码块应该是这样的:
protected override void OnFormClosing(FormClosingEventArgs e) {
// your code here
base.OnFormClosing(e);
}
当重写基本方法,总是包括基本通话如图所示,除非你有特别的理由不这么做。
答
尝试使用FormClosed代替的FormClosing,我试图和工作对我非常好:)希望帮助你:)
+0
试过了。不会改变。显然这应该根据其他意见,所以在我的一端肯定是错的。一些我错过或忘记的东西 – 2014-09-28 16:45:45
你面临什么问题? – Dmitry 2014-09-28 16:28:39
该代码应该可以在表单关闭的任何时候运行。要更好地控制它,请测试e.CloseReason属性。您也可以通过设置e.Cancel = true来取消关闭; – 2014-09-28 16:32:47
事件是否连线?最好使用覆盖:OnFormClosing来避免表单必须听自己的事件。尽量避免使用MessageBox进行调试调用,它可能会干扰太多事情。 – LarsTech 2014-09-28 16:34:37