事件、委託一直是我接觸C#以來的盲點,隨著不斷的接觸、碰到過一些,在同事的協助下,慢慢開始用委託、甚至是事件。
本案例是項目中SignalEditor裡面的一個應用。就是實現當屬性改變之後,繪圖介面會重新繪圖。所以,實現分了幾個部分,分別放在幾個文檔下面。
1.引發事件
public event EventHandler PropertyChange;
protected void PropertyChanged()
{
if (PropertyChange != null)
{
PropertyChange(this, new EventArgs());
}
}
在父類SignalGenerator中定義.
2.觸發事件
private double value=2;
[DisplayName("恒值")]
public double Value
{
get { return this.value; }
set
{
this.value = value;
PropertyChanged();
}
}
在這裡,每當屬性改變,就調用PropertyChange函數
在每一個訊號實作類別,如ConstSignal中將函數PropertyChange添加到需要觸發的地方。
3.訂閱事件
訂閱事件就是在事件函數裡面添加將執行的函數,一旦PropertyChange被觸發,實際執行的是註冊了的事件signalGenerator_PropertyChange.
if (view != null)
{
view.PropertyGrid.SelectedObject = signalGenerator;
}
try
{
signalGenerator.PropertyChange += new EventHandler(signalGenerator_PropertyChange);
}
catch
{ }
定義事件觸發後執行的動作函數
void signalGenerator_PropertyChange(object sender, EventArgs e)
{
TsmiClear_Click(sender, e);
TsmiDraw_Click(sender, e);
}