用户控件,自定义控件和组件之间有什么区别?


81

您可以将三个不同的东西添加到项目中,但是我不确定我是否了解其中的区别。例如,它们在使用时似乎都显示在组件工具箱中Form。每种情况都有哪些常见用法场景?有什么不同?

Answers:


161

用户控件,自定义控件和组件之间的主要区别在于它们从继承树的不同级别继承:

MyComponent
   |-> Component

MyCustomControl
   |-> Control
          |-> Component

MyUserControl
   |-> ContainerControl
          |-> ScrollableControl
                 |-> Control
                        |-> Component

因此,简而言之,您将获得具有不同选项的不同数量的预接线功能。

您何时会使用其他选项?(这些是思想和见解,不是真理)

  • 如果要提供没有UI的功能,请创建一个组件(例如Timer组件,数据源等)
  • 如果要制作一个可以完全控制其外观的组件,并且不希望不必要的功能包,请创建一个自定义控件。典型的情况是功能有限的简单控件(例如按钮)
  • 如果要将现有控件组合到可重用的构建块中(例如,两个带有按钮的列表,可以在列表之间移动项目),请创建用户控件

16
是的,我花了一些时间才弄清楚,但这似乎UserControl确实是一个“复合”控件(由其他控件组成的控件),而自定义控件实际上是用户设计的控件。
Dave Cousineau 2012年

如果要创建一个由多个TextBox组成的控件,它们之间具有自定义和动态绘制的图形,我应该选择UserControl吗?
尼克·阿列克谢夫

@NickAlexeev自几年前以来,我在winforms领域工作不多,但我相信那是要走的路,是的。
FredrikMörk'14

2
@FredrikMörk好答案!您能否建议一个网站,让我们学习如何创建自定义控件?
John Odom 2015年

1
YouTube上的@John Odom AngelSix系列就是其中之一。我查了一下,我知道这是在视频9,具体而言,他用它在26:00
Mour_Ka

2

除了Fredrik所说的那样,当您计划在项目中重用它们时,通常会使用组件和自定义控件。仅在一个项目中使用时,请使用用户控件。


10
为什么这样?在单个项目中使用用户控件的好处,在多个项目中使用它的限制...?
卡米洛·马丁

1

我认为最后的陈述不正确。我创建用户控件的原因有很多。

主要原因是这样,如果可以说我设计了多个控件组合在一起的接口。

首先创建一个类库,然后向其中添加用户控件。现在,如果我需要更改用户控件工作原理背后的逻辑部分,则可以非常轻松地进行。该类库也可以多次使用。

同样在同一个经典库中,我可以拥有多个可以共享并用于我的任何用户控件的类。

这是我使用用户控件的主要原因。并且如果您要更改用户控件或类库。一旦你建立了工作。dll将动态更新bin文件夹中的日期。

因此,如果我在另一个项目中引用了这些更改,这些更改也将出现在新项目中。

此外,它不使用与表单相同的绘制例程,也没有使用在表单上加载的任何内容。

因此,用户控件使我们能够实现非常模块化的功能,并且我可以拥有多个共享类库基本类的用户控件……因此,用户控件的用途并不只是针对一个项目。在这方面没有限制。杰夫


回复:“我相信最后一条语句是不是在我看来,正确的” -的最后一条语句是什么?[而且最好在答案中引用该陈述,这样读者便会立即知道您在指什么。]
ToolmakerSteve19年

-5

它们之间的主要区别- 用户控件是扩展名为.ascx的页面文件,只能在单个应用程序或项目中使用,而自定义控件是可以在多个应用程序中使用的程序集(dll文件)。


7
问题是关于WinForms,而不是ASP.NET。
Qwertie 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.