建立包含其他資料的自定義 EventArgs
自定義事件通常需要包含有關事件資訊的自定義事件引數。例如 MouseEventArgs
其用於通過像 MouseDown
或 MouseUp
事件滑鼠事件,包含關於用於生成事件 Location
或 Buttons
資訊。
建立新事件時,要建立自定義事件 arg:
- 建立一個派生自
EventArgs
的類,並定義必要資料的屬性。 - 作為慣例,類的名稱應以
EventArgs
結尾。
例
在下面的示例中,我們為類的 Price
屬性建立了 PriceChangingEventArgs
事件。事件資料類包含 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; }
在呼叫 OnPriceChanging
之後,將 Price
的定義更改為使用 e.NewPrice
作為屬性值:
int price;
public int Price
{
get { return price; }
set
{
var e = new PriceChangingEventArgs(price, value);
OnPriceChanging(e);
price = e.NewPrice;
}
}