public class MyClass
{
  private int stauts =0;  public int Stauts
  { 
    get{return status;}
    set{status = value;}
  }
}这是我的类,里面有个属性,
我要当属性的值改变时触发事件,对其值作出判断,然后再作相应处理。
这个事件怎么写?请大家指点。

解决方案 »

  1.   

    public delegate Event(object sender,EventArgs e)public event Event OnEvent;
      

  2.   

    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());
    }
      }
      

  3.   

    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;
    }
    }
    }
    }
      

  4.   

    这个需求很有普遍性,因此MS定义了一个接口:INotifyPropertyChanged。
    lz只需要定义一个PropertyChangedEventHandler PropertyChanged就可以,而且用在控件绑定的时候会大大减轻你的工作,因为这是MS“官方”承认的接口。
      

  5.   

    //定义一个委托,一定要类写在外面
    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)
            {
            //加入自己的应用
    }    
      

  6.   


    若还有别的地方能使Stauts改变在你对Stauts 能改变的地方加上事件的应用即可
      

  7.   

    不知道danjiewu(阿丹)说的是不是属实,我在vs2003中是没有找到这个接口。
    我自己的做法就是在set中调用一个事件处理方法。
      

  8.   

    INotifyPropertyChanged确实是2.0才有的。
    如果是2003的话就自己定义一个事件好了。
    public class Sample
        { 
            private int status;        public int Stauts
            {
                get { return status; }
                set
                {
                    if (status != value)
                    {
                        status = value;
                        OnPropertyChanged("Status");
                    }
                }
            }
            
            public event PropertyChangedHandler PropertyChanged;        protected virtual void OnPropertyChanged(string propertyName)
            {
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedArgs(propertyName));
                }
            }        
        }    public delegate void PropertyChangedHandler(object sender,PropertyChangedArgs args);    public class PropertyChangedArgs : EventArgs
        {
            public PropertyChangedArgs() { }        public PropertyChangedArgs(string propertyName) { this.propertyName = propertyName; }        private string propertyName;        public string PropertyName
            {
                get { return propertyName; }
                set { propertyName = value; }
            }
        }