我做了一个用户控件,定义了一个PUBLIC的INT值,要在值发生改变时响应数据改变事件,请问这个事件该怎样定义,怎样写,请帮忙写一个现成的例子,谢谢!

解决方案 »

  1.   


        public class IntChangeArgs
        {
            public int OldValue{ get; set;}
            public int NewValue{ get; set;}
        }
        public delegate void IntChangeHandler(object sender, IntChangeArgs i);    public partial class YourControl : UserControl
        {
            public event IntChangeHandler OnIntChanged;        public void YouMethod()
            {
                //... 如果你把这个数从 3 改变成 5            if(OnIntChanged != null)
                {
                    OnIntChanged(this, new IntChangeArgs {OldValue = 3, NewValue = 5});
                }
            }
        }    ==============
        你在另外的位置就实例你的控件    var yc = new YourControl();
        yc.OnIntChanged += new IntChangeHandler(DataCon_OnIntChanged);
        
        private void DataCon_OnIntChanged(object sender, IntChangeArgs i)
        {
            //这里
        }
      

  2.   

    不要忘记 你在控件里面控制好 每次更改 int 的时候都要执行if(OnIntChanged != null)
                {
                    OnIntChanged(this, new IntChangeArgs {OldValue = 3, NewValue = 5});
                }
    当然这个方法可以放在 set 方法里
      

  3.   

    通过Transparent Proxy
    public class Person : INotifyPropertyChanged
    {
      private string firstNameValue;
      public string FirstName{
      get { return firstNameValue; }
      set
      {
      firstNameValue=value;
      NotifyPropertyChanged("FirstName");
      }
      }
      public event PropertyChangedEventHandler PropertyChanged;
      public void NotifyPropertyChanged(string propertyName)
      {
      if (PropertyChanged != null)
      {
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
      }
      }   
    }
      

  4.   

    我是这样写的,可是不成功!
    namespace TeTu
    {
        using System.Collections;
        public delegate void IntDataChangeHandler(object sender, int i);    public partial class ctrMainCalendar : UserControl
        {
            public ctrMainCalendar()
            {
                InitializeComponent();
            }        public int int_FlagDataChanged = 0;
            public event IntDataChangeHandler OnIntDataChanged;        private void ctrMainCalendar_Load(object sender, EventArgs e)
            {
                this.OnIntDataChanged += new IntDataChangeHandler(DataCon_OnIntDataChanged);
            }        private void DataCon_OnIntDataChanged(object sender, int i)
            {
                button1.Text = Convert.ToString(i);
            }        private void setvalue()
            {            OnIntDataChanged(this, int_FlagDataChanged);
            }
        }
    }
    控件外部:
            private void button1_Click(object sender, EventArgs e)
            {
                ctrMainCalendar1.int_FlagDataChanged++;
            }
    该如何修改?
      

  5.   


    写在 NotifyPropertyChanged 里面
      

  6.   

    怎么把它加到USERCONTROL中去,怎么用呀?
      

  7.   

    int_FlagDataChanged 只是 ctrMainCalendar 类的字段(Field)或称变量,不是属性啊
      

  8.   


    // 利用系统 delegate
    public event EventHandler IntValueChanged;protected void OnIntValChanged(EventArg e)
    {
        // 引发 IntValueChanged 事件
        if (IntValueChanged != null)
            this.IntValueChanged (this, e);
    }// 在需要引发事件的地方 调用 this.OnIntValChanged(new EventArgs());
    int intValue = 0;
    public int IntValue
    {
        get
        {
            return this.intValue;
        }
        set
        {
            if (this.intValue != value)
            {
                this.intValue = value;
                this.OnIntValueChanged(new EventArgs());
            }
        }
    }
      

  9.   

    这个帖子怎么还在 我在2楼不是都写了么
    另外你的控件里属性改成public int int_FlagDataChanged = 0
    {
        get { return int_flagDataChanged; }
        set
        {
            int_flagDataChanged = value;
            if(OnIntDataChanged != null)
            {
                  OnIntDataChanged(this, int_flagDataChanged);
            }
        }
    }
    然后 控件外 调用的时候 别忘了 添加 事件响应函数
      

  10.   


    真逗!你如果写过实现INotifyPropertyChanged的代码,还不知道如何声明public event .....?这个接口不就是强迫你实现这个声明的么?!唉,不知道你何时能清醒,那样就比较能独立工作了。