怎么写一个自定义事件
public class MyClass
{
private int stauts =0;
public int Stauts
{
get{return status;}
set{status = value;}
}
}
这是我的类,里面有个属性,
我要当属性的值改变时触发事件,对其值作出判断,然后再作相应处理。
这个事件怎么写?请大家指点。
------解决方案--------------------private void OnStart(object sender, EventArgs value)
{
if (Start != null)
{
Start(sender, value);
}
}
public event StartEventHandler Start;
public int Stauts
{
get{return status;}
set{status = value;
OnStart(this, new EventArgs());
}
}
------解决方案--------------------public class MyClass
{
//定义事件参数
public class ValueSettingEventArgs : EventArgs
{
private int m_Value;
private bool m_cancel;
public ValueSettingEventArgs(int value)
{
this.m_Value = value;
}
public int Value
{
get
{
return this.m_Value;
}
}
public bool Cancel
{
get
{
return this.m_Value;
}
set
{
this.m_Value = value;
}
}
}
private int stauts = 0;
//声明事件
public event EventHandler <ValueSettingEventArgs> ValueSetting;
public int Stauts
{
get { return status; }
set
{
if (status != value)
{
if (ValueSetting != null)
{
ValueSettingEventArgs args = new ValueSettingEventArgs(value);
ValueSetting(this, args);//引发自定义事件
if (args.Cancel)
{
return;
}
}
status = value;
}
}
}
}
------解决方案--------------------这个需求很有普遍性,因此MS定义了一个接口:INotifyPropertyChanged。
lz只需要定义一个PropertyChangedEventHandler PropertyChanged就可以,而且用在控件绑定的时候会大大减轻你的工作,因为这是MS“官方”承认的接口。
------解决方案--------------------//定义一个委托,一定要类写在外面
public delegate void EventHandlerStautsChanged(int Costs);//+
public class MyClass
{
//定义事件
public event EventHandlerStautsChanged StautsChanged;//+
private int stauts =0;
public int Stauts
{
get{return status;}
set{
status = value;
//触发事件
if (null!=StautsChanged) //+
StautsChanged(status ); //+
}
}
}
//外部调用
MyClass实列.StautsChanged+= new EventHandlerStautsChanged(this.StautsChanged);
private void StautsChanged(int Stauts)
{
//加入自己的应用
}
------解决方案-------------------- 若还有别的地方能使Stauts改变
在你对Stauts 能改变的地方加上事件的应用即可
------解决方案--------------------mark
------解决方案--------------------不知道danjiewu(阿丹)说的是不是属实,我在vs2003中是没有找到这个接口。
我自己的做法就是在set中调用一个事件处理方法。
------解决方案--------------------mark
------解决方案--------------------