C# Language Création de EventArgs personnalisés contenant des données supplémentaires


Exemple

Les événements personnalisés nécessitent généralement des arguments d'événement personnalisés contenant des informations sur l'événement. Par exemple, MouseEventArgs qui est utilisé par les événements de la souris tels que les événements MouseDown ou MouseUp , contient des informations sur l' Location ou les Buttons utilisés pour générer l'événement.

Lors de la création de nouveaux événements, pour créer un argument d'événement personnalisé:

  • Créez une classe dérivée de EventArgs et définissez les propriétés des données nécessaires.
  • Par convention, le nom de la classe doit se terminer par EventArgs .

Exemple

Dans l'exemple ci-dessous, nous créons un événement PriceChangingEventArgs pour la propriété Price d'une classe. La classe de données d'événement contient un CurrentPrice et un NewPrice . L'événement se déclenche lorsque vous attribuez une nouvelle valeur à la propriété Price et informe le consommateur que la valeur change et lui permet de connaître le prix actuel et le nouveau prix:

PriceChangingEventArgs

public class PriceChangingEventArgs : EventArgs
{
    public PriceChangingEventArgs(int currentPrice, int newPrice)
    {
        this.CurrentPrice = currentPrice;
        this.NewPrice = newPrice;
    }

    public int CurrentPrice { get; private set; }
    public int NewPrice { get; private set; }
}

Produit

public class Product
{
    public event EventHandler<PriceChangingEventArgs> PriceChanging;

    int price;
    public int Price
    {
        get { return price; }
        set
        {
            var e = new PriceChangingEventArgs(price, value);
            OnPriceChanging(e);
            price = value;
        }
    }

    protected void OnPriceChanging(PriceChangingEventArgs e)
    {
        var handler = PriceChanging;
        if (handler != null)
            handler(this, e);
    }
}

Vous pouvez améliorer l'exemple en permettant au consommateur de modifier la nouvelle valeur, puis la valeur sera utilisée pour la propriété. Pour ce faire, il suffit d'appliquer ces changements de classes.

Changez la définition de NewPrice pour qu'elle soit NewPrice :

public int NewPrice { get; set; }

Modifiez la définition de Price pour utiliser e.NewPrice comme valeur de propriété, après avoir appelé OnPriceChanging :

int price;
public int Price
{
    get { return price; }
    set
    {
        var e = new PriceChangingEventArgs(price, value);
        OnPriceChanging(e);
        price = e.NewPrice;
    }
}