Winforms 组件与控制

Winforms 组件与控制,winforms,controls,components,Winforms,Controls,Components,在WinForms.Net控件的世界中 组件和控件之间的区别是什么 控件是否可以包含任何组件 组件是否可以包含任何控件 组件只是对象/子API的表示。ImageList是一个不可见的组件,只是一组图像的API。事实上,您可以将它们拖放到表单上,这在设计器中只是一种糖分 控件旨在可见/可交互/可嵌套。响应您的评论,可以在对象浏览器中将组件和控件视为来自不同的对象层次结构。不能在控件中添加组件,因为控件集合仅接受控件基本类型的对象 组件不能包含控件。控件具有充当窗口所需的所有管道。能够响应窗口消息

在WinForms.Net控件的世界中

组件和控件之间的区别是什么

  • 控件是否可以包含任何组件
  • 组件是否可以包含任何控件

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


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

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


      组件不能包含控件。

      控件具有充当窗口所需的所有管道。能够响应窗口消息(WndProc)并具有最重要的句柄。组件缺少所有这些。它实际上相当简单,它有设计时支持设置属性,并且可以进行处置,仅此而已


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

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

      • 它没有用户界面功能,这就是为什么您无法看到可视化表示
      • 它是可移植的,不特定于任何语言
      另一方面,控件是提供用户界面功能的组件

      • 因为控件有UI,所以可以看到它的视觉表示
      • 它是特定于语言的,不可移植

      问题还有另外一部分。本文可能会有所帮助:组件似乎没有
      Load
      事件。那么,在装载组件的表单之后,如何执行需要进行的初始化呢???通常,组件在运行时不知道它位于哪个表单上。因此,它也不关心表单的加载状态,并且构造函数足以完成所有必需的初始化。单击Ask Question按钮来解释您的需求。我的组件当然关心,因为当构造函数运行时,所有事件处理程序都是空的。你可以看到我的问题。谢谢