为什么要从设计器中插入非UI的Windows.Forms组件?

在C#(和Visual Basic)中,您可以直接从表单设计器添加几个非UI组件(那些不从System.Windows.Forms.Controlinheritance的组件)。 这些组件的示例是System.Windows.Forms.FolderBrowserDialogSystem.Windows.Forms.Timer

但是,使用UI设计器添加非UI控件而不是直接从代码实例化它们会带来什么好处? 这背后有一个理由吗?

我认为在设计器中使用非UI组件至少具有以下好处:

设计时支持

Windows窗体中最强大的function之一是能够使用设计器来设置组件。
尽管Timer不是UI组件,但您可以在设计时将其属性设置为interval。 这适用于许多其他组件,如BindingSourceErrorProvider ,…您可以使用非常友好的属性网格和类型编辑器和类型转换器来在设计时配置属性。

  • 如果要为其他控件配置依赖属性; 例如,通过将BindingSource添加到设计器,它使数据绑定非常容易。
  • 当您需要使用诸如HelpProviderTooltip类的扩展程序提供程序时,由于它们与其他控件相关,因此在设计模式下配置它们非常容易。
  • 当您需要配置DataSourceDataMember等属性时,使用设计器并使用强大的属性网格function非常友好。
  • 组件将添加为类级别字段,您可以使用deigner将它们公开。
  • 当您需要为组件使用Form Localizablefunction时,可以使用设计器完全使用它。
  • 当您只需添加或删除事件处理程序时,可以使用属性网格来完成。

标准代码

如果你看看设计师生成的代码,你会看到:

  • 支持ISupportInitialize组件的生成代码使用其BeginInitEndInit
  • 生成组件的代码,将this.components传递给构造函数,然后在Dispose时使用它

如果您不需要设计时支持并且为组件编写标准代码,那么在代码中使用主题就完全可以了。