【发布时间】:2010-12-10 17:19:06
【问题描述】:
C#:SuspendLayout 是否级联到子控件?
我是否必须自己迭代控件的子级才能在它们上调用suspendlayout? 和他们的孙子?大孙子??大孙子?
谢谢
【问题讨论】:
-
赞成,因为这是一个非常可靠的问题。
C#:SuspendLayout 是否级联到子控件?
我是否必须自己迭代控件的子级才能在它们上调用suspendlayout? 和他们的孙子?大孙子??大孙子?
谢谢
【问题讨论】:
SuspendLayout 不会递归传播,但根据您的操作,仅暂停特定控件可能就足够了。
经验法则是:您将要对其布局进行多次处理的控件挂起。
例如:
Size 属性,则无需暂停任何内容。子项只会更改一次,而这反过来只会导致父项发生一次更改。Size,您应该只暂停父级。孩子们每个人只能调整一个大小,所以不需要暂停他们。但是这些孩子中的每一个都会导致父母重新布局,因此一旦您致电ResumeLayout,就暂停父母批量进行所有重新布局。Size、Location 和Bounds 属性,则应暂停父级和子级。它们都将触发多个布局事件。请确保仅在其所有子级恢复后才恢复父级。否则,每个子级的 ResumeLayouts 都会导致父级的重新布局,因此您一开始就不会从暂停它中获得任何好处。Size,则无需暂停任何内容。这将间接修改一堆孩子,但父母是做他们修改的人,所以它应该已经知道如何有效地处理它。例如,每次用户调整窗口大小时,它都会这样做。【讨论】:
是的; SuspendLayout 停止正在绘制的控件(或者更确切地说是正在处理的布局请求),默认情况下会沿子结构向下流动。
换句话说:不再有“没有人”调用绘制例程了。
【讨论】:
SuspendLayout 不是关于抑制绘制程序,而是关于Layout 事件。此事件由子级触发,而不是由父级触发。它会向上流动,而不是向下流动。