Debe usar captadores y definidores definidos por el usuario (es decir, propiedades) para activar manualmente el evento. Mira a este código, que debe ser bastante simple:
// We declare a delegate to handle our event
delegate void StateChangedEventHandler(object sender, StateChangedEventArgs e);
// We declare event arguments class to specify, which value has changed to which value.
public class StateChangedEventArgs: EventArgs
{
string propertyName;
object oldValue;
object newValue;
/// <summary>
/// This is a constructor.
/// </summary>
public StateChangedEventArgs(string propertyName, object oldValue, object newValue)
{
this.propertyName = propertyName;
this.oldValue = oldValue;
this.newValue = newValue;
}
}
/// <summary>
/// Our class that we wish to notify of state changes.
/// </summary>
public class Widget
{
private int x;
public event StateChangedEventHandler StateChanged;
// That is the user-defined property that fires the event manually;
public int Widget_X
{
get { return x; }
set
{
if (x != value)
{
int oldX = x;
x = value;
// The golden string which fires the event:
if(StateChanged != null) StateChanged.Invoke(this, new StateChangedEventArgs("x", oldX, x);
}
}
}
}
Nuestra variable miembro se define privada, por lo que nadie fuera de la clase Widget puede acceder a ella; se ven obligados a utilizar la propiedad Widget_X, y una vez que lo hacen, hay dos casos:
- consiguen la variable
x
. Nada que hacer.
- Establecieron la variable
x
en el mismo valor que tenía antes. Nada que hacer. Lo revisamos dentro del setter.
- Establecen la variable
x
y la cambian. Ahí es donde disparamos el evento.
Es fundamental comprobar si tenemos algún controlador de eventos registrado (es decir, nuestro evento no es nulo) antes de invocar el evento. En otro caso, obtendremos una excepción.
Solo estoy en la clase de programación de 200 niveles. Entiendo eso de los controles de forma. Pero el objeto al que me refiero es una instancia de una clase que creé. Dado que hay múltiples valores en los objetos, estoy un poco confundido sobre cómo registrar un evento para rastrear si alguno de ellos cambia. – Sinaesthetic