visual studio 2005 C# winFore有一个窗体form1
form1里有一个用户控件uc1
uc1有一个属性值        bool pTest = true;        public bool pTestKan
        {
            set { pTest = value;}
            get { return pTest; }
        }pTest的值 在uc1的一个函数khandle中修改,想在pTest被修改后立即调用form1里一个函数formUpdateMess我想应该用delegate和event,具体怎么实现?哪位给看看.

解决方案 »

  1.   

       // 定义公共生成事件委托
         
        public delegate void MyEventHandler(object sender, EventArgs e); //定义事件
    public event MyEventHandler myEventHandler; //触发事件
        Public void OnMyEventName(int step, string label)
    {
        if (myEventHandler != null)
    myEventHandler(this, null);
    }
      

  2.   

    // 定义公共生成事件委托
         
        public delegate void MyEventHandler(object sender, EventArgs e);    //定义事件
        public event MyEventHandler myEventHandler;    //触发事件
        Public void OnMyEventName()
        {
            if (myEventHandler != null)
            myEventHandler(this, null);
        }上面打错
      

  3.   

      private void button1_Click(object sender, EventArgs e)
            {
                UC1 _UC1 = new UC1();
                _UC1.formUpdateMess = new Test.UpdateMess(formUpdateMess);
                _UC1.pTestKan = true;
            }        public void formUpdateMess()
            {
                MessageBox.Show("ASDF");
            } public class UC1
        {
            public delegate void UpdateMess();
            public UpdateMess formUpdateMess;        bool pTest = true;        public bool pTestKan
            {
                set { pTest = value; if (formUpdateMess != null)formUpdateMess.Invoke(); }
                get { return pTest; }
            }     }
      

  4.   

    lz可以参考:
    1、在用户控件uc1中定义事件:
    internal event EventHandler <EventArgs> TestValueChanged;
    2、户控件uc1中属性pTestKan的实现方式如下:
    bool pTest = true;
    public bool pTestKan
    {
        set 
        {
            if (this.pTest != value)
            {
                this.pTest = value;
                this.OnTestKanChanged();
            }
        }
        get { return this.pTest; }
    }
    3、实现事件通知函数OnTestKanChanged:
    private void OnTestKanChanged()
    {
        if (this.TestValueChanged != null)
        {
            this.TestValueChanged(this, EventArgs.Empty);
        }
    }
    4、uc1的函数khandle中修改属性pTestKan(注意不是pTest);
    5、form1挂接uc1的TestValueChanged事件:
    this.uc1.TestValueChanged += new EventHandler<EventArgs>(UC1_TestValueChanged);
    6、在form1中实现事件响应函数UC1_TestValueChanged:
    private void UC1_TestValueChanged(object sender, EventArgs e)
    {
        this.formUpdateMess();
    }