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

问题描述 投票:79回答:5

这些是你可以添加到项目中的三个不同的东西,我不太确定我是否理解其中的差异。 例如,在使用Form时,它们似乎都显示在组件工具箱中。 每种方法有哪些常见的使用方案? 有什么不同?

c# winforms controls components
5个回答
148
投票

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

MyComponent
   |-> Component

MyCustomControl
   |-> Control
          |-> Component

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

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

你什么时候会使用不同的选择? (这些是思想和观点,而不是真理)

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

4
投票

这是CustomControl和UserControl之间的一些区别:

自定义控制

松散耦合的控件代码和UI

从控制派生

在ResourceDictionary中定义UI

UI是可换肤的

有动态布局

UI可以在不同的项目中更改

拥有完整的工具箱支持

定义单个控件

更灵活

==============

用户控制

紧密耦合的控制代码和UI

从UserControl派生

将UI定义为普通XAML

儿童控制是可以修饰的

有静态布局

UI是固定的,在不同的项目中不能有不同的外观

无法添加到工具箱中

定义一组控件

像自定义控件一样不灵活


2
投票

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


0
投票

我认为最后的陈述在我看来并不正确。 我出于许多不同的原因创建用户控件。

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

我首先创建一个类库,然后向其添加用户控件。 现在,如果我需要更改用户控件如何工作的逻辑的任何部分,我可以很容易。 此类库也可以多次使用。

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

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

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

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

因此,用户控件使我们能够非常模块化。我可以拥有多个共享类库基础类的用户控件...因此,用户控件的目的不是针对一个项目。 它在这方面没有限制。 杰夫


-4
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.