【问题标题】:Component vs. Control组件与控制
【发布时间】:2010-10-14 22:28:51
【问题描述】:

在 WinForms .Net 控件的世界中

组件和控件有什么区别?

  • 控件可以包含任何组件吗?
  • 组件可以包含任何控件吗?

【问题讨论】:

标签: winforms controls components


【解决方案1】:

控件具有充当窗口所需的所有管道。响应 Window 消息 (WndProc) 和拥有句柄的能力是最重要的。组件缺少所有这些。它真的很简单,它具有设置属性的设计时支持,并且可以被释放,仅此而已。

组件仍然可以有运行时表示,OpenFileDialog 就是最好的例子。但这实际上是 Windows 内置的对话框,而不是 Windows 窗体。

【讨论】:

  • 而且组件似乎没有Load 事件。那么如何执行在包含组件的表单加载后需要进行的初始化???
  • 一般来说,组件在运行时不知道它所在的表单。所以也不会关心表单的加载状态,并且构造函数足以完成所有必需的初始化。点击按钮说明您的要求。
  • 我的组件肯定很关心,因为在构造函数运行时所有的事件处理程序都是空的。你可以看到我的问题here。谢谢。
【解决方案2】:

组件只是对象/子 API 的表示。例如。 ImageList 是一个不可见的组件,只是一组图像的 API。您可以将它们拖放到表单上的事实只是设计器中的糖。

控件旨在可见/可交互/可嵌套。

【讨论】:

  • 还有其他问题。
【解决方案3】:

响应您的评论,可以在对象浏览器中看到组件和控件来自不同的对象层次结构。不能在 Control 中添加组件,因为 Controls 集合只接受基本类型为 Control 的对象。

组件不能包含控件。

【讨论】:

    【解决方案4】:

    组件基本上是一个类(它可以是 dll、Activex 对象)。

    • 它没有用户界面功能,这就是您看不到视觉表示的原因。
    • 它是可移植的,不特定于任何语言。

    而另一方面,control 是提供用户界面功能的组件。

    • 由于控件具有 UI,因此您可以看到它的可视化表示。
    • 它是特定于语言的,不可移植。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-21
      • 2017-09-28
      • 2019-02-11
      • 2011-06-21
      • 2019-03-19
      • 2015-07-22
      相关资源
      最近更新 更多