Looking for c# Keywords? Try Ask4Keywords

C# Language Создание настраиваемых EventArg, содержащих дополнительные данные


пример

Для пользовательских событий обычно требуются настраиваемые аргументы событий, содержащие информацию о событии. Например MouseEventArgs , который используется на события мыши , как MouseDown или MouseUp событий, содержит информацию о Location или Buttons , которые используются для генерации события.

При создании новых событий для создания настраиваемого события arg:

  • Создайте класс, полученный из EventArgs и определите свойства необходимых данных.
  • В качестве условного обозначения имя класса должно заканчиваться EventArgs .

пример

В приведенном ниже примере мы создаем событие PriceChangingEventArgs для свойства Price для класса. Класс данных событий содержит CurrentPrice и NewPrice . Событие возникает, когда вы назначаете новое значение для свойства Price и позволяет потребителю знать, что значение меняется и позволяет узнать о текущей цене и новой цене:

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; }
}

Товар

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);
    }
}

Вы можете улучшить пример, разрешив потребителю изменить новое значение, а затем значение будет использовано для свойства. Для этого достаточно применить эти изменения в классах.

Измените определение NewPrice :

public int NewPrice { get; set; }

Измените определение Price на использование e.NewPrice качестве значения свойства после вызова OnPriceChanging :

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