2014-09-28 116 views
-1

我相信当在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(); 
    } 

我以前做过这个,但我想不到,但我根本记不清我是怎么做到的。你们能帮助我吗?

+2

你面临什么问题? – Dmitry 2014-09-28 16:28:39

+0

该代码应该可以在表单关闭的任何时候运行。要更好地控制它,请测试e.CloseReason属性。您也可以通过设置e.Cancel = true来取消关闭; – 2014-09-28 16:32:47

+1

事件是否连线?最好使用覆盖:OnFormClosing来避免表单必须听自己的事件。尽量避免使用MessageBox进行调试调用,它可能会干扰太多事情。 – LarsTech 2014-09-28 16:34:37

回答

2

你的事件不接线。如果不创建与设计师的事件,那么你需要手动添加,一般在构造函数中:

public Form1() { 
    InitializeComponent(); 
    this.FormClosing += fileTypeDialog_FormClosing; 
} 

但形式不应该听自己的事件,因为它可以访问其受保护的事件方法。因此,只需开始输入“覆盖OnForm”并从intellisense中选择“OnFormClosing”即可。您的代码块应该是这样的:

protected override void OnFormClosing(FormClosingEventArgs e) { 
    // your code here 

    base.OnFormClosing(e); 
} 

当重写基本方法,总是包括基本通话如图所示,除非你有特别的理由不这么做。

-1

尝试使用FormClosed代替的FormClosing,我试图和工作对我非常好:)希望帮助你:)

+0

试过了。不会改变。显然这应该根据其他意见,所以在我的一端肯定是错的。一些我错过或忘记的东西 – 2014-09-28 16:45:45