自定义空间,按照通常的做法,是重载CreateChildControls,初始化控件。
我想问的是,可否直接在Init事件中初始化,而不重载CreateChildControls?
如:
protected override void OnInit(EventArgs e)
{
    InitializeComponent();
    base.OnInit(e);
}private void InitializeComponent()
{
    this.Init += new EventHandler(this.Page_Init);
}private void Page_Init(object sender, EventArgs e)
{
}

解决方案 »

  1.   

    CreateChildControls 会在很多时候被触发,与Init截然不同。差别这么大,我简直都不想去重复说了。你应该仔细看看。我只举出三个地方:1. 在onInit执行之后,Page要为所有控件装载Viewstate之前,它会调用所有控件的 CreateChildControls。
    2. 在某个控件中有代码 ChildControlCreated=false之后,page执行PreRender方法的时候,如果你没有覆盖它,page会递归调用所有控件的 PreRender,从而page内部的所有你使用 ChildControlCreated=false 清除了子控件的控件会自动调用 CreateChildControls 重建子控件。
    3. 你动态实例化的控件的时候这个控件其实并不创建内部控件。在把它放入page内某个容器控件的Controls之后,就会自动触发它的 CreateChildControls。实际上此时与 1. 的机制和作用完全一样,只不过这是在控件加入时执行,而1. 是在page刚刚被创建之后执行。
      

  2.   

    我现在大概了解CreateChildControls的执行流程。我只是想知道,我不用CreateChildControls,而在Init事件中完成控件的初始化,这样会不会有什么不妥?