C#创建包含其他数据的自定义EventArgs

示例

自定义事件通常需要包含有关事件信息的自定义事件参数。例如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;
    }
}