Designer中BeginInit()和EndInit()方法的作用

Raf*_*ski 10 .net c# winforms

我很红,ISupportInitializeDesigner使用这些接口方法来支持优化,确保控件初始化的原子性,并防止在初始化期间对控件执行任何操作.我的问题是:

  1. 他们以什么方式帮助Designer优化控件的初始化?
  2. 为什么要确保初始化的原子性?
  3. 是否有任何合理的示例何时在不是由Designer生成的代码中使用它们?

Han*_*ant 7

它与优化没有任何关系.ISupportInitialize是控件对分配属性的顺序敏感时所需的接口.没有任何方法可以影响设计师分配它们的顺序,它按字母顺序排列.

您通常在方法中将bool变量设置为true,BeginInit()在属性设置器中对此进行测试,并在设置时不执行任何操作.EndInit()然后,您的方法使属性值有效.

你可以在ErrorProvider组件中看到一个很好的例子.请注意它如何使用这些方法来推迟数据绑定.该PictureBox控件是另一个很好的例子,它使用它推迟下载图像. TrackBar是另一个例子,它使用它来确保Value属性介于最小值和最大值之间.Etcetera,.NET Framework源代码通常是查看.NET类型在实践中如何使用的好地方.

  • 不,你错过了一英里。不知道如何更好地解释它或提供更多使用示例。把它放在架子上,你迟早会发现你为什么需要它。 (2认同)

LeB*_*ste -1

根据定义,设计器允许在可视模式下创建控件,然后由 Visual Studio 生成初始化控件的适当代码。

初始化在一处完成,以避免代码稍后出现任何空引用问题。当您使用它们的引用时,您确实希望每个控件都已经创建。

例如,如果您想基于特定的构造函数动态创建界面,您完全可以创建控件初始化。