85

这是您可以添加到项目中的三种不同的东西,我不太确定我是否理解其中的区别。例如,当使用Form. 它们各自有哪些常见的使用场景?有什么不同?

4

4 回答 4

167

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

MyComponent
   |-> Component

MyCustomControl
   |-> Control
          |-> Component

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

因此,简而言之,您可以通过不同的选项获得不同数量的预接线功能。

你什么时候会使用不同的选项?(这些是想法和意见,不是真理)

  • 如果您想在没有 UI 的情况下提供功能(例如 Timer 组件、数据源等),请创建一个组件
  • 如果您想创建一个可以完全控制其视觉外观的组件,并且您不想要任何不必要的功能包袱,请创建一个自定义控件。典型情况是功能有限的简单控件(例如按钮)
  • 如果要将现有控件组合成可重用的构建块(例如两个带有按钮的列表,您可以在列表之间移动项目),请创建一个用户控件。
于 2009-08-24T13:41:35.373 回答
2

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

于 2009-08-24T16:08:25.380 回答
2

我认为最后一种说法在我看来是不正确的。我出于许多不同的原因创建用户控件。

主要原因是,如果按照我的说法,我设计了一个将多个控件组合在一起的界面。

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

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

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

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

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

所以用户控件给了我们非常模块化的能力而且我可以有多个用户控件共享类库的基本类......所以用户控件的目的不是为了一个项目。它在这方面没有任何限制。杰夫

于 2017-03-13T23:36:55.333 回答
-5

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

于 2014-05-20T12:44:00.440 回答