Listing 1

// Defining the LabelChange event
1   public class LabelChangeEventArgs : EventArgs
2   {
3     public LabelChangeEventArgs(E_PROPERTY_CHANGED changed,
4       object newValue)
5     {
6       this.ChangedProperty = changed;
7       this.NewValue = newValue;
8     }
9     public readonly E_PROPERTY_CHANGED ChangedProperty;
10    public readonly object NewValue;
11  }
12
13  public delegate void LabelChangeEventHandler(object sender,
14    LabelChangeEventArgs args);
15
16  public event LabelChangeEventHandler LabelChange;
17
18  protected virtual void OnChange(E_PROPERTY_CHANGED prop,
19    object val)
20  {
21    if (LabelChange != null)
22    {
23      LabelChange(this, new LabelChangeEventArgs(prop, val));
24    }
25  }