【问题标题】:What is the "Control.Site" Property?什么是“Control.Site”属性?
【发布时间】:2015-07-30 19:48:59
【问题描述】:

在 Windows 窗体应用程序中,System.Windows.Forms 库中的控件具有名为 Site 的属性。 这个属性在控件中的作用是什么?

【问题讨论】:

  • 我没有看到该属性。您是否在表单中添加了一些内容来添加它? (就像在 Tooltips 属性中添加的 ToolTip 组件一样?)
  • 参见ISite Interface 文档的备注部分。基本上,一个网站是链接ComponentContainer
  • 它纯粹是设计时的属性,在运行时根本不会使用。这是您可以将组件拖放到表单上并使其出现在表单设计视图下方的栏中的基本原因,站点将引用表单对象。

标签: c# winforms controls


【解决方案1】:

Site 属性继承自Component,与ControlParent 属性非常相似。

ParentSite 的主要区别在于Parent 的值只能是Control,而Site 可以分配一个非可视容器。

Component 基类用于 Winforms 设计器工具箱中的那些非可视化工具。例如System.Windows.Forms.Timer 可以拖到Form 上。 PropertyGrid 可用于设置其属性和分配事件处理程序,所有这些都由设计器完成,无需编写任何代码。

System.ComponentModel 类背后的想法是为软件库提供 API,以利用 Visual Studio 等 IDE 的设计时功能。它迎合了RAD (Rapid Application Development) 概念,其中通用或通用组件将利用 API。例如在属性网格的底部expose extra information about a property,甚至创建完整的custom editors

如果您想深入了解内部结构,您可以查看Programming with Components,或者如果您想快速了解一下,我想Class vs. Component vs. Control 可能是一个很好的起点。

【讨论】:

    【解决方案2】:

    站点将Component 绑定到Container 并启用它们之间的通信,并为容器提供管理其组件的方法。 站点还可以用作特定于容器的每个组件信息的存储库,例如组件名称。有关组件的更多信息,请参阅Programming with Components

    实施者须知

    要成为站点,类必须实现 ISite 接口。

    参考: https://msdn.microsoft.com/en-us/library/system.componentmodel.isite.aspx

    【讨论】:

      猜你喜欢
      • 2014-09-02
      • 2015-02-10
      • 2012-07-21
      • 2016-05-20
      • 1970-01-01
      • 1970-01-01
      • 2019-09-13
      • 2013-03-17
      • 2020-10-10
      相关资源
      最近更新 更多