【问题标题】:What is the difference between User Control, Custom Control and Component?用户控件、自定义控件和组件有什么区别?
【发布时间】:2010-11-22 06:55:08
【问题描述】:

这是您可以添加到项目中的三种不同的东西,我不太确定我是否理解其中的区别。例如,当使用Form 时,它们似乎都出现在组件工具箱中。它们各自有哪些常见的使用场景?有什么区别?

【问题讨论】:

    标签: c# winforms controls components


    【解决方案1】:

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

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

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

    您何时会使用不同的选项? (这些是想法和意见,不是真理)

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

    【讨论】:

    • 是的,我花了一段时间才弄清楚,但似乎 UserControl 确实是一个“复合”控件(由其他控件组成的控件),而自定义控件实际上是一个用户设计的控件。
    • 如果想创建一个由多个 TextBox 组成的控件,它们之间有自定义和动态绘制的图形,我应该选择UserControl 吗?
    • @NickAlexeev 几年前我在 winforms 领域的工作并不多,但我相信这将是正确的选择。
    • @FredrikMörk 不错的答案!你能推荐一个我们可以学习如何创建自定义控件的网站吗?
    • youtube 上的 @John Odom AngelSix 系列就是其中之一。我查了一下,我知道它在视频 9 中,具体来说,他在 26:00 使用它
    【解决方案2】:

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

    【讨论】:

    • 为什么会这样?在单个项目中使用用户控件的好处,在多个项目中使用的限制......?
    【解决方案3】:

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

    【讨论】:

    • 问题是关于 WinForms,而不是 ASP.NET。
    【解决方案4】:

    我认为最后一个陈述在我看来是不正确的。 我创建用户控件有很多不同的原因。

    主要原因是如果我说我设计了一个包含多个控件的界面 组合在一起。

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

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

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

    所以如果我在另一个项目中引用这个 这些更改也将出现在新项目中。

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

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

    【讨论】:

    • Re “我认为最后的陈述在我看来是不正确的” - 什么的最后陈述? [最好在您的回答中引用该声明,以便读者立即知道您指的是什么。]
    猜你喜欢
    • 2010-10-22
    • 2010-11-02
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-11
    • 2011-08-07
    相关资源
    最近更新 更多