繁体   English   中英

(C#) SuspendLayout 是否级联到子控件?

[英](C#) Does SuspendLayout cascade to child controls?

C#:SuspendLayout 是否级联到子控件?

我是否必须自己迭代控件的子项才能对它们调用 suspendlayout? 和他们的孙子? 大孙子?? 大孙子?

谢谢

SuspendLayout不会递归传播,但取决于您在做什么,仅暂停特定控件可能就足够了。

经验法则是:您暂停要多次弄乱其布局的控件。

例如:

  • 如果一个控件包含多个子项,并且您打算添加一个,则不需要挂起任何内容。
  • 如果您打算向父级添加多个子级,则应暂停父级。
  • 如果您打算更改一个孩子的Size属性,则无需暂停任何内容。 子项只会更改一次,而这反过来只会导致父项发生一次更改。
  • 如果您打算更改多个子项的Size ,则应仅暂停父项。 孩子们每个只能调整一次大小,所以不需要暂停他们。 但是这些孩子中的每一个都会导致父级重新布局,因此一旦您调用ResumeLayout ,就暂停父级以批量执行所有这些重新布局。
  • 例如,如果您打算更改多个子项的SizeLocationBounds属性,则应暂停父项和子项。 所有这些都会触发多个布局事件。 请确保仅在其所有子项恢复后才恢复父项。 否则,每个孩子的ResumeLayout s 都会导致父级的重新布局,因此您不会从一开始就挂起它没有任何好处。
  • 如果父级有多个子级,但您只想更改父级的Size ,则无需暂停任何内容。 这将间接修改一堆孩子,但父母是进行修改的人,所以它应该已经知道如何有效地处理它。 例如,每次用户调整窗口大小时它都会这样做。
  • 如果不止一个父级的布局相关属性发生更改,但没有更改任何子级,则应仅暂停父级。 推理与上一点相同,仅暂停父级,因此它本身仅产生一个布局事件。

是的; SuspendLayout 停止正在绘制的控件(或者更确切地说是正在处理的布局请求),默认情况下它会沿着子结构向下传递。

换句话说:不再有“没有人”调用绘制程序了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM