做了一个自定义控件,想根据控件的属性设置一些属性
现在的问题是,我要在这个控件的属性被设置后,我需要根据这些属性,进行一些设置刚开始写在了控件的构造方法了,可是构造方法执行时,控件的属性还没有从designer里读取现在想找个合适的事件写进去,说以想问下什么事件执行后控件的属性被设置?
然后还会激发那些事件,这样可以事件中做我的设置了。

解决方案 »

  1.   

    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private void Form1_Load(object sender, EventArgs e)
            {
                MyTexBox myTextBox = new MyTexBox();
                this.Controls.Add(myTextBox);
                myTextBox.MyTextChanged += new MyTexBox.MyTextChangedHandler(MyTextChanged);
                myTextBox.MyText = "sfsf";
            }        private void MyTextChanged(string strText)
            {
                MessageBox.Show(strText);
            }
        }    public class MyTexBox : TextBox
        {
            public delegate void MyTextChangedHandler(string strText);
            public event MyTextChangedHandler MyTextChanged;        private string _MyText;
            public string MyText
            {            get { return _MyText; }
                set
                {
                    _MyText = value;
                    if (MyTextChanged != null)
                    {
                        MyTextChanged(_MyText);
                    }
                }
            }
        }
    }
      

  2.   


    这是有“模式”的。典型的代表,叫做 INotifyPropertyChanged。自己google一下。程序员如果不知道,那么肯定没有经过正规.net技术原理方面的培训。
      

  3.   

    在silverlight中,出现了新的机制,叫做 DependencyProperty。如果你学silverlight开发,就要在INotifyPropertyChanged、INotifyCollectionChanged之外还要充分掌握这个。
      

  4.   

    我看了一下msdn上的说明:
    http://msdn.microsoft.com/zh-cn/library/system.componentmodel.inotifypropertychanged.aspx其实不仅仅是“向客户端”,控件自己也需要监听自己的属性改变,这样编程就更简练,因为你可以在初始化方法中一次性地、集中地注册事件方法,而不需要分不到每一个属性的set方法中去写业务处理代码。
      

  5.   

    designer.loader+=(s,e)=>
    {
       //做的事情
    }
    不知道有这个事件没