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

lor*_*ova 5 c# windows-forms-designer winforms

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

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

Rez*_*aei 6

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

设计时支持

Windows窗体中最强大的功能之一是能够使用设计器来设置组件.
即使Timer不是UI组件,但您可以在设计时将其属性设置为间隔.这适用于许多其他组件,例如BindingSource,ErrorProvider...您可以使用非常友好的属性网格和类型编辑器和类型转换器来在设计时配置属性.

  • 如果要为其他控件配置依赖属性; 例如,通过添加BindingSource到设计器,它使数据绑定非常容易.
  • 当你需要使用扩展器供应商,如HelpProviderTooltip,因为它们与其他控件,这是很容易在设计模式对其进行配置.
  • 当您需要配置像DataSourceDataMember这样的属性时,使用设计器并使用很好的属性网格功能非常友好.
  • 组件将添加为类级别字段,您可以使用deigner将它们公开.
  • 当您需要为组件使用Localizable功能时Form,可以使用设计器完全使用它.
  • 当您需要简单地添加或删除事件处理程序时,您可以使用属性网格来执行此操作.

标准代码

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

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

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