使用FormClosingEventArgs使用CancelEventArgs和Form_Closing关闭()

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用FormClosingEventArgs使用CancelEventArgs和Form_Closing关闭()相关的知识,希望对你有一定的参考价值。

我们正在升级和重新模块化代码,因为我们从32位系统转移到64位系统。在正当程序中,我们的目标之一是从Init()函数更改,其中添加了事物作为示例。

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

我希望Windows事件能够处理这些事情。所以我去了Windows窗体事件中的Form_Closing事件,[毫不奇怪]看到这不是form_closing事件。我的问题是,与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;
            }
        }
    }
答案

你没有得到带有CancelEventArgs类的CloseReason属性,这是唯一的区别,因为FormClosingEventArgs继承自CancelEventArgs类。 FormClosingEventArgs是在.Net 2.0中引入的。

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

protected override void OnFormClosing(FormClosingEventArgs e) {
  // your code
  base.OnFormClosing(e);
}

以上是关于使用FormClosingEventArgs使用CancelEventArgs和Form_Closing关闭()的主要内容,如果未能解决你的问题,请参考以下文章

C# winForm程序窗体右上角X关闭按钮点击后 弹出提示文本 只有确定按钮点击后程序无法关闭

在 linux 上,使用 C/C++ 编程时,我应该使用啥函数来输入密码? [复制]

我们如何使用WPF / C#可执行文件调试DLL(使用本机C / C ++的bulit)源?

在 C++ 中使用 C 函数 使用 extern "C"

使用 MetroWerks C/C++ 开发的 C/C++ 资源

在 C/C++ 中使用 swift 库?