事件、委托一直是我接触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);
}