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

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

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

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

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

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

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

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