2

当我们从 32 位系统转移到 64 位系统时,我们目前正在升级和重新模块化我们的代码。在适当的过程中,我们的目标之一是改变一个 Init() 函数,其中添加了一些东西作为示例。

this.Closing += new System.ComponentModel.CancelEventHandler(this.Form_Closing);

我希望 Windows 事件来处理这些事情。所以我去了 Windows 窗体事件中的 Form_Closing 事件,[毫不奇怪] 发现这不是 form_closure 事件。我的问题是,CancelEventArgs 与 FormClosingArgs 实际发生的事情之间是否有任何区别,或者这两段代码实际上是在做同样的事情,一个是系统的组件,一个是 Windows 事件处理的结果它最擅长什么?作为一名实习生,我只是在潜入并沉迷于这个新项目。是否可以只用 FormClosing 替换 CancelEventArgs 而不会丢失任何数据或问题?

代码 1:CancelArgs

 private void Form_Closing(object sender, CancelEventArgs e)
    {
        // If the user hit Cancel, just close the form.
        if (this.DialogResult == DialogResult.Ignore)
            return;

        if (this.DialogResult == DialogResult.OK)
        {
            // If the address is not dirty, just cancel out of
            // the form.
            if (!this._editedObject.IsDirty)
            {
                this.DialogResult = DialogResult.Cancel;
                return;
            }

            // Save changes.  If save fails, don't close the form.
            try
            {
                SaveChanges();
                return;
            }
            catch (Exception ex)
            {
                ShowException se = new ShowException();
                se.ShowDialog(ex, _errorObject);
                _errorObject = null;
                e.Cancel = true;
                return;
            }
        }

Form_Closing -- 首选路线

private void ScheduleItemDetail_FormClosing(object sender, FormClosingEventArgs e)
    {
        // If the user hit Cancel, just close the form.
        if (this.DialogResult == DialogResult.Ignore)
            return;

        if (this.DialogResult == DialogResult.OK)
        {
            // If the address is not dirty, just cancel out of
            // the form.
            if (!this._editedObject.IsDirty)
            {
                this.DialogResult = DialogResult.Cancel;
                return;
            }

            // Save changes.  If save fails, don't close the form.
            try
            {
                SaveChanges();
                return;
            }
            catch (Exception ex)
            {
                ShowException se = new ShowException();
                se.ShowDialog(ex, _errorObject);
                _errorObject = null;
                e.Cancel = true;
                return;
            }
        }
    }
4

1 回答 1

1

您不会使用 CancelEventArgs 类获得CloseReason属性,这是唯一的区别,因为 FormClosingEventArgs 继承自 CancelEventArgs 类。FormClosingEventArgs 是在 .Net 2.0 中引入的。

或者,您也可以重写 OnFormClosing 方法,而不是使用事件。

protected override void OnFormClosing(FormClosingEventArgs e) {
  // your code
  base.OnFormClosing(e);
}
于 2014-08-04T13:01:43.087 回答