控件就是组件。控件通常是指设计时所见即所得、运行时处理图形显示和接受用户交互输入的那些组件。当你开发一个组件,你需要从具有丰富的界面和交互机制的父类去继承,那么你做出来的当然就是控件了。
如果你发觉根本不需要继承那写交互机制,只要继承更高层的,那么你就不是在开发控件了(那么当然也还是在开发组件)
比如许多入门书上叫做“Timer控件”的这个东西,如果你看源代码,它仅仅是组件,它没有继承控件父类接口才实现的有关“绘制界面、捕获用户焦点、支持拖放、返回windows窗口句柄、窗口线程切换、支捕获用户按键、坐标位置、改变大小、设置前景和背景颜色、设置可见性”等等功能。如果你开发一个组件,他不需要这些功能,而你从控件父类来继承设计,那么显然是画蛇添足了,由于实现有一堆自己根本不支持的功能方法接口,于是违反了面向对象设计的设计原则。
.net的组件概念,基本上就是指可以支持在vs设计窗体上拖入、编程的类。所以它跟随便一个类也还是有区别。组件概念就好像是给普通类放上去特定的接口、或者特定的Attribute。只要非常重要,细微之处也可以自成体系。组件类非常简单,几乎没有内容,可是它是规定,vs等开发IDE环境就认识从组件类继承的子类、而不支持不从组件类继承的子类。
组件是指可重复使用并且可以和其他对象进行交互的对象。组件(component)是靠类实现的。控件是能够提供用户界面接口(UI)功能的组件。换句话说就是,控件是具有用户界面功能的组件。所有控件肯定都是组件,但并不是每个组件都一定是控件
控件分为:复合、扩展和自定义三类。
复合控件是封装在公共容器内的Windows窗体控件的集合。这种控件有时称为“用户控件”,包含的控件称为“构成控件”。复合控件包含与每个包含的Windows窗体控件相关联的所有固有功能,允许有选择地公开和绑定它们的属性。复合控件还提供了大量的默认键盘处理功能,不需要任何额外的开发。复合控件从UserControl类派生而来。
扩展控件是从任何现有的Windows窗体控件或者自定义控件导出的继承控件。它保留Windows窗体控件的所有固有功能,然后通过添加自定义属性、方法或其他功能扩展此固有功能。可以使用此选项重写基控件的绘制逻辑,然后更改该控件的外观以扩展其用户界面。 http://itkeys.cn/
创建控件的另一种方法是通过从Control继承从头开始创建一个控件。Control类提供控件所需的所有基本功能(包括鼠标和键盘处理事件),但不提供控件特定的功能或图形界面。若要实现自定义控件,必须编写该控件的OnPaint事件的代码,以及所需的任何功能特定的代码。