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

时间:2009-10-28 01:43:28

标签: c# controls

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

我是否必须自己迭代控件的子节点才能调用suspendlayout? 和他们的大孩子?盛大的孩子?盛大的大孩子?

由于

2 个答案:

答案 0 :(得分:1)

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

换句话说:“没有人”再次调用绘画程序。

答案 1 :(得分:0)

SuspendLayout不会递归传播,但是根据您的工作,仅挂起特定的控件就足够了。

经验法则是:挂起您将要弄乱其布局的控件多次。

例如:

  • 如果控件包含多个子代,并且您打算添加一个子代,则无需暂停任何操作。
  • 如果您打算为父母增加一个以上的孩子,则应该暂停父母。
  • 如果您打算更改一个孩子的Size属性,则无需暂停任何操作。子项将只被更改一次,而这将仅导致父项发生一次更改。
  • 如果您打算更改多个子级的Size,则应仅暂停父级。孩子们每个只能获得一个调整大小的尺寸,因此无需将其暂停。但是这些孩子中的每个孩子都会导致父母重新宣导,因此,一旦您致电ResumeLayout,暂停父母就可以全部 进行所有这些宣告。
  • 如果您打算更改多个子项的SizeLocationBounds属性,则应暂停父项和子项。它们都将触发多个布局事件。只要确保仅在所有子代都恢复后才恢复父代即可。否则,每个孩子的ResumeLayout都将导致父级的重新参与,因此从一开始就将其挂起不会带来任何好处。
  • 如果父母有多个孩子,但您只希望更改父母的Size,则无需暂停任何操作。这将间接地修改一堆孩子,但是父母要对其进行修改,因此它应该已经知道如何有效地处理这些孩子。例如,每次用户调整窗口大小时,它便已执行该操作。
  • 如果更改了多个父级的与布局相关的属性,但没有一个子级更改,则仅父级应被挂起。推理与上一点相同,只是暂停了父对象,因此它本身仅产生一个布局事件。