Объявите событие как EventHandler<CancelEventArgs>
. Затем слушатель может установить для Отмена значение true, и вы можете использовать это значение, чтобы определить, вызывать ли «настоящее» событие или нет.
Обязательный пример кода:
public event EventHandler<CancelEventArgs> PreviewDoStuff;
public event EventHandler DoStuff;
private void RaiseDoStuff()
{
CancelEventArgs args = new CancelEventArgs();
OnPreviewDoStuff(args);
if (!args.Cancel)
{
OnDoStuff(EventArgs.Empty);
}
}
protected void OnPreviewDoStuff(CancelEventArgs e)
{
EventHandler<CancelEventArgs> previewDoStuff = PreviewDoStuff;
if (previewDoStuff != null)
{
previewDoStuff(this, e);
}
}
protected void OnDoStuff(EventArgs e)
{
EventHandler doStuff = DoStuff;
if (doStuff != null)
{
doStuff(this, e);
}
}
В качестве примера такого использования в реальной жизни проверьте событие FormClosing , в котором используется класс FormClosingEventArgs, который, в свою очередь, наследуется от CancelEventArgs.