一般情况:
在VS视图模式下设计窗体对象后,其 InitializeComponent 方法体一般如下:
private void InitializeComponent(){
// 创建各控件实例
this.SuspendLayout();
// 设置各控件具体属性
this.ResumeLayout(false);
this.PerformLayout();
}
官方解释:
Control.SuspendLayout
临时挂起控件的布局逻辑。
Control.ResumeLayout
恢复正常的布局逻辑。
Control.ResumeLayout(Boolean)
恢复正常的布局逻辑,可以选择强制对挂起的布局请求立即进行布局。
Control.PerformLayout
强制控件将布局逻辑应用于其所有子控件。
疑问:
既然 Control.ResumeLayout(true) 可以达到强制布局的效果,为何不用这一句替代 ResumeLayout(false) 和 PerformLayout() 的组合?
答:
根据网上各种解释和自己反编译 System.Windows.dll 后得出的较靠谱的答案:
貌似和属性 ‘Anchor’有关,ResumeLayout(false) 会更改部分子控件的‘Anchor’属性,而ResumeLayout(true) 则不能。(*现在还不知道有什么具体例子能够验证这一点)

本文探讨了WinForm中Control.SuspendLayout、Control.ResumeLayout及其不同参数,以及Control.PerformLayout之间的关系。官方解释指出SuspendLayout用于挂起布局逻辑,ResumeLayout恢复布局,其中ResumeLayout(true)强制立即布局。然而,有一种观点认为ResumeLayout(false)会影响子控件的'Anchor'属性,而ResumeLayout(true)则不会。这个区别在实际应用中的具体表现还有待进一步验证。

581

被折叠的 条评论
为什么被折叠?



