A cancelable event can be raised by a class when it is about to perform an action that can be canceled, such as the FormClosing
event of a Form
.
To create such event:
CancelEventArgs
and add additional properties for event data.EventHandler<T>
and use the new cancel event arg class which you created.Example
In the below example, we create a PriceChangingEventArgs
event for Price
property of a class. The event data class contains a Value
which let the consumer know about the new . The event raises when you assign a new value to Price
property and lets the consumer know the value is changing and let them to cancel the event. If the consumer cancels the event, the previous value for Price
will be used:
PriceChangingEventArgs
public class PriceChangingEventArgs : CancelEventArgs
{
int value;
public int Value
{
get { return value; }
}
public PriceChangingEventArgs(int value)
{
this.value = value;
}
}
Product
public class Product
{
int price;
public int Price
{
get { return price; }
set
{
var e = new PriceChangingEventArgs(value);
OnPriceChanging(e);
if (!e.Cancel)
price = value;
}
}
public event EventHandler<PriceChangingEventArgs> PropertyChanging;
protected void OnPriceChanging(PriceChangingEventArgs e)
{
var handler = PropertyChanging;
if (handler != null)
PropertyChanging(this, e);
}
}