在 .NET 中,通常有一种模式使用属性来使用事件来允许取消事件。例如,这里的一个例子
private void OtherInitialize() {
this.Closing += new CancelEventHandler(this.Form1_Closing);
}
private void Form1_Closing(Object sender, CancelEventArgs e) {
if (!isDataSaved) {
e.Cancel = true;
MessageBox.Show("You must save first.");
}
else {
e.Cancel = false;
MessageBox.Show("Goodbye.");
}
}
是否有此模式的名称,或任何描述如何实现此模式的文章(从视图的角度来看)?我能想象的是这样的
CancelEventArgs args = new CancelEventArgs();
if(Closing != null)
Closing(this, args);
if(!args.Cancel)
DoActualClosing();
但我不确定这是否这么容易。如果有多个事件处理程序,哪个处理程序将确定 args.Cancel 的最终值?如果任何(或所有)处理程序抛出异常怎么办?