为什么要从设计器中插入一个非 UI Windows.Forms 的组件?
Why should I insert a non-UI Windows.Forms component from the designer?
在 C#(和 Visual Basic)中,您可以直接从窗体设计器添加几个非 UI 组件(那些不继承自 System.Windows.Forms.Control
的组件)。这些组件的示例是 System.Windows.Forms.FolderBrowserDialog
和 System.Windows.Forms.Timer
.
但是使用 UI 设计器添加非 UI 控件而不是直接从代码实例化它们有什么好处?这背后有什么道理吗?
如果您不需要设计时支持,并且您自己会负责编写标准代码来初始化和处置组件,那么您不需要将组件放在设计器上。
在设计器中使用非 UI 组件有以下好处:
- 设计时支持
- 标准代码(用于初始化和处置)
设计时支持
windows 表单中最强大的功能之一是能够使用设计器设置组件属性。
尽管 Timer
不是 UI 组件,但您可以在设计时设置其属性,如间隔。这适用于许多其他组件,如 BindingSource
、ErrorProvider
等,您可以使用非常友好的 属性 网格和类型编辑器以及类型转换器在设计时配置属性。
- 当你想为其他控件配置依赖属性时;例如通过在设计器中添加
BindingSource
,它使数据绑定变得非常容易。
- 当您需要使用像
HelpProvider
和Tooltip
这样的扩展器提供程序时,由于它们与其他控件相关,因此在设计模式下配置它们非常容易。
- 当你需要配置像
DataSource
和DataMember
这样的属性时,使用设计器非常友好,使用很棒的属性网格功能。
- 组件将添加为 class 级别字段,您可以使用 deigner 使它们 public。
- 当您需要为组件使用
Form
的 Localizable
功能时,使用设计器完全可用。
- 当您需要简单地添加或删除事件处理程序时,您可以使用 属性 网格来完成。
标准代码
如果您查看设计器生成的代码,您会看到:
- 为支持
ISupportInitialize
的组件生成的代码使用它们的 BeginInit
和 EndInit
- 为组件生成代码,将
this.components
传递给构造函数,然后在Dispose
时使用它
如果你不需要设计时支持,并且你为组件编写了标准代码,那么在代码中使用主题是完全可以的。
在 C#(和 Visual Basic)中,您可以直接从窗体设计器添加几个非 UI 组件(那些不继承自 System.Windows.Forms.Control
的组件)。这些组件的示例是 System.Windows.Forms.FolderBrowserDialog
和 System.Windows.Forms.Timer
.
但是使用 UI 设计器添加非 UI 控件而不是直接从代码实例化它们有什么好处?这背后有什么道理吗?
如果您不需要设计时支持,并且您自己会负责编写标准代码来初始化和处置组件,那么您不需要将组件放在设计器上。
在设计器中使用非 UI 组件有以下好处:
- 设计时支持
- 标准代码(用于初始化和处置)
设计时支持
windows 表单中最强大的功能之一是能够使用设计器设置组件属性。
尽管 Timer
不是 UI 组件,但您可以在设计时设置其属性,如间隔。这适用于许多其他组件,如 BindingSource
、ErrorProvider
等,您可以使用非常友好的 属性 网格和类型编辑器以及类型转换器在设计时配置属性。
- 当你想为其他控件配置依赖属性时;例如通过在设计器中添加
BindingSource
,它使数据绑定变得非常容易。 - 当您需要使用像
HelpProvider
和Tooltip
这样的扩展器提供程序时,由于它们与其他控件相关,因此在设计模式下配置它们非常容易。 - 当你需要配置像
DataSource
和DataMember
这样的属性时,使用设计器非常友好,使用很棒的属性网格功能。 - 组件将添加为 class 级别字段,您可以使用 deigner 使它们 public。
- 当您需要为组件使用
Form
的Localizable
功能时,使用设计器完全可用。 - 当您需要简单地添加或删除事件处理程序时,您可以使用 属性 网格来完成。
标准代码
如果您查看设计器生成的代码,您会看到:
- 为支持
ISupportInitialize
的组件生成的代码使用它们的BeginInit
和EndInit
- 为组件生成代码,将
this.components
传递给构造函数,然后在Dispose
时使用它
如果你不需要设计时支持,并且你为组件编写了标准代码,那么在代码中使用主题是完全可以的。