我们正在升级和重新模块化代码,因为我们从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;
}
}
}
答案 0 :(得分:1)
您没有使用CancelEventArgs类获取CloseReason属性,这是唯一的区别,因为FormClosingEventArgs继承自CancelEventArgs类。 FormClosingEventArgs是在.Net 2.0中引入的。
或者,您也可以只重写OnFormClosing方法,而不是使用该事件。
protected override void OnFormClosing(FormClosingEventArgs e) {
// your code
base.OnFormClosing(e);
}