何时添加组件类与用户控件?

时间:2009-09-21 18:18:50

标签: c# user-controls controls components

我有一个大致的想法,并且有一些明显的情况,但是对我来说也有一些灰色区域 - 何时最好用于从组件扩展以及何时最好创建用户控件?这与我试图解决的具体工作问题有关,但具体问题并不重要 - 这个问题的一般答案对我来说已经足够了。

4 个答案:

答案 0 :(得分:20)

在WPF和Windows Forms中,两者的主要区别在于UserControl是一个控件集合 - 一个可重用的单个对象,由多个控件本身“组成”。

如果要使用新行为制作单个原始控件,而不是使用由较小控件组成的“控件”,则会阻止Component / CustomControl / Control而不是UserControl。组件通常是非可视行为,其中CustomControl / Control通常用于可视控件。

答案 1 :(得分:14)

组件和控件之间存在一个显着差异:控件具有用户界面。所有控件也是组件,但并非所有组件都是控件。如果需要显示用户界面,通常需要从某种控制基础(Control,UserControl,Form等)派生。如果你只是有行为,比如使用BackgroundWorker组件,那么你只需要直接从Component派生。

另一个注意事项......组件和控件都可以放到设计图面上。组件在特殊区域中显示为图标和标签,控件直接显示在设计图面上。但是,您可以使用第三种方法:简单的类。如果您不需要设计表面支持,我建议使用简单的类而不是Component或Control。当你需要的只是100%纯粹的行为而没有设计时支持时,它们重量更轻,更少膨胀。

答案 2 :(得分:5)

通常,当控件没有任何用户界面(或者至少没有表单中存在的用户界面)时,我会使用Component。如果是UI控件,我会改为创建User Control

答案 3 :(得分:4)

我通常只在我想要打包一些UI功能时扩展Control或更多的UserControl。对于Components,我想到了经典的例子,Timer。它可以放到设计器上,通过“属性”窗格进行配置,然后通过后面的代码以编程方式进行访问。简而言之,当我希望能够通过设计器操作一些捆绑状态和行为(没有UI的对象)时,我扩展了Component。