日期:2014-05-19  浏览次数:20979 次

怎么写一个自定义事件
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
------解决方案--------------------