关于复合控件的文章在网上已经很多了,本文只是最近自己做复合控件的一些心得体会。希望大家愿意和我分享。
复合控件作为组件二次开发一个很好的方式被很多人所喜欢,理由就是它在复用性和实用性两方面做到了很好的权衡。如果你的项目对某一组控件的组合依赖比较多,而这些组合之间的关系基本上也是很稳定的话,再者你对它们会大量使用到的话,那么你可以考虑将它们做成复合控件进行引用。
复合控件不是用户控件ascx,许多用户都做过ascx但是并没有做过复合控件。其实它们的区别也不是很大,表现形式基本上也是一样的,区别就在于用户控件的制作过程和制作页面是无异的,而复合控件的制作则相对更“专业”一点,复合控件以DLL的形式被提供,可以被复用于多个项目,而用户控件则仅限于当前项目中。这些很“酷”的因素也足以让你愿意尝试你的第一个复合控件了。
最简单的复合控件(为了从基础开始有个全面的认识,我用最最简单的例子去开篇,让你对复合控件有个更抽象的认识,从宏观角度更好地把握制作过程)
根据大家对用户控件的认识想必很容易做出同样类型的复合控件,只要它能够以复合控件的形式提供,它事实上已经是一个复合控件,至于好不好用,那就要看你设计的功力了。
在用户控件中,大家通过添加各种控件,然后对它们进行调用,我们用FindControl去寻找它们,理由是因为它们被添加进用户控件ascx文件的时候是protected的,而被调用的时候,用户控件是protected的,而其子控件就相应地变成private的了,因此我们无法轻松的利用点运算符去获取它们,因此我们采用FindControl去Find它们。找到之后它们就可以被你轻松使用了。事实上你最需要的是它们布局上的相对稳定以及一些内部逻辑,而从外部看,控件则是一个整体。在复合控件中,我们也可以这么做,但是我们甚至可以做得更简单,因为它的访问权限受我们支配,我们可以通过public去设置它们,这样用户程序就可以无限制访问了,也就不需要FindControl了,当然你还可以通过get访问器去访问,这样你同样可以获得你子控件对象的实例。你可以像下面这样定义你的子控件,这样你就可以在外部对它们进行访问了。