主题,区分Control呈现的几个方法!
周五的晚上,和(张兄)聊了一些关于Control的几个呈现方法,收获颇丰,心中窃喜!这几天,女朋友刚好不在家,没她打搅,所以写下这点“文字“,希望对大家有帮助!
都知道Control一般用三个方法来呈现自己,RenderControl,Render和RenderChildren方法,下面讲讲方法的大致用途!
RenderControl方法,通过判断Control的Visible属性,决定是否调用Render方法!大家应该经常把某些控件的Visible属性,设置成Visible=false,这样控件就被隐藏了!
Render方法,当Control.Visible=true时,Render方法被调用!然后Render方法调用RenderChildren(),其他什么事情都不做,唯一的任务就是掉用这个方法!
RenderChildren方法,先呈现自己,然后判断Control的_occasionalFields.Controls字段是否为null,如果不为null,则不断循环调用RenderControl方法,直到轮循完所有的子控件!
下面是我的一点心得;
二;一般不要重写Control的RenderControl方法,因为RenderControl方法还要判断Visible属性,来决定是否要调用Control的Render方法!(如果您一定要重写她,那我也没办法,但不要忘记掉用base.RenderControl方法,以便base调用Render方法!)
三;一般重写Control的Render方法,而且最好加上base.Render方法,为什么呢?因为Render方法要调用RenderChildren方法!
四;千万不要重写RenderChildren方法,因为这不是设计人员应该动的地方,因为这个方法唯一的目的,就是轮循调用Controls.RenderControl方法,如果人为的加上一些输出,将有可能破坏控件呈现的结构!
总结;
非常抱歉,因为工作比较忙,没有把代码贴出来!不过,大家不用担心,我也是参考了Clingingboy(张兄)的文章!
如果,觉得比较这些“文字”比较枯涩,那么可以先看看张兄的文章,再回头看看,也许感觉就会不同,哈哈!
补充;
后来发现,重写Control.RenderControl方法,就算调用了base.RenderControl方法,呈现的字节仍为0,所以建议大家不要重写RenderControl和RenderChildren方法!
图一

有人问我,“为什么重写Control的Render方法的时候,没有调用base.Render方法,效果确和调用了base.Render方法,没有区别?”,告诉大家原因,那是因为你的控件没有包含其他子控件,所以看不出来!
参考;
张兄的文章http://www.cnblogs.com/Clingingboy/archive/2006/08/01/465397.html