【问题标题】:Run code when window closes窗口关闭时运行代码
【发布时间】:2014-09-28 16:26:32
【问题描述】:

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

在我想之前我已经这样做了,但我根本不记得我是怎么做到的。你们能帮帮我吗?

【问题讨论】:

  • 你遇到过什么问题?
  • 该代码应该在表单关闭的任何时候都可以使用。为了更好地控制它,测试 e.CloseReason 属性。如果需要,您也可以通过设置 e.Cancel = true; 来取消关闭;
  • 事件是否已连接?最好使用 override: OnFormClosing 来避免表单必须监听自己的事件。尽量避免使用 MessageBox 进行调试调用,它会干扰太多事情。
  • LarsTech 我如何连接它?我想这与某处的表单设计器有关。但除了你看到的代码,我什么都没做。但由于某种原因,它对我不起作用。关闭窗口时不会显示任何消息框
  • @DanielJørgensen 在 cmets 中使用 @ 符号在 Stack Overflow 上通知他们。如果您没有使用设计器来创建该方法,那么在您的构造函数中,您必须输入:this.FormClosing += fileTypeDialog_FormClosing;。要避免该事件,只需开始输入“override OnForm”并从智能感知中选择 OnFormClosing。将您的代码放入该代码块中。

标签: c# winforms settings


【解决方案1】:

您的活动未连接。如果不使用设计器创建事件,则需要手动添加,通常在构造函数中:

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

但是表单不应该监听自己的事件,因为它可以访问受保护的事件方法。所以只需开始输入“覆盖 OnForm”并从智能感知中选择“OnFormClosing”。您的代码块如下所示:

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

  base.OnFormClosing(e);
}

当覆盖基方法时,请始终包括所示的基调用,除非您有特定的理由不这样做。

【讨论】:

    【解决方案2】:

    尝试使用 FormClosed 而不是 FormClosing,我尝试过并且效果很好 :) 希望对您有所帮助 :)

    【讨论】:

    • 试过了。不改变。显然,这应该根据其他 cmets 工作,所以我一定有问题。我错过或忘记的东西
    猜你喜欢
    • 2021-03-27
    • 2016-12-24
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多