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

(C#)SuspendLayout是否级联到子控件?,c#,controls,C#,Controls,C#:SuspendLayout是否级联到子控件 我是否必须自己迭代控件的子级才能对其调用suspendlayout? 他们的孙子呢?孙子孙女??孙子 谢谢是的;SuspendLayout停止正在绘制的控件(或者更确切地说是正在处理的布局请求),默认情况下,该控件会沿着子结构向下延伸 换句话说:“没有人”再调用绘制例程了。SuspendLayout不会递归传播,但根据您正在执行的操作,仅暂停特定控件可能就足够了 经验法则是:挂起要多次处理其布局的控件 例如: 如果控件包含多个子控件,并且您打算

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

我是否必须自己迭代控件的子级才能对其调用suspendlayout? 他们的孙子呢?孙子孙女??孙子


谢谢

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


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

SuspendLayout
不会递归传播,但根据您正在执行的操作,仅暂停特定控件可能就足够了

经验法则是:挂起要多次处理其布局的控件

例如:

  • 如果控件包含多个子控件,并且您打算添加一个子控件,则不需要挂起任何内容
  • 如果要向父级添加多个子级,则应挂起父级
  • 如果要更改一个子项的
    Size
    属性,则无需挂起任何内容。子对象只会更改一次,而这反过来只会导致父对象中发生一次更改
  • 如果要更改多个子项的
    大小
    ,则应仅挂起父项。孩子们每次只得到一个调整大小的选项,所以不需要挂起它们。但是,这些子级中的每一个都会导致父级重新启动,因此,一旦调用
    ResumeLayout
    ,将暂停父级以批量执行所有这些重新启动
  • 如果要更改多个子项上的属性,例如
    大小
    位置
    边界
    属性,则应同时挂起父项和子项。它们都将有多个布局事件触发。只需确保在所有子级恢复后才恢复父级。否则,每个子项的ResumeLayouts都会导致父项的重新发布,因此您将无法从暂停它中获得任何好处
  • 如果父项有多个子项,但您只希望更改父项的
    大小
    ,则无需挂起任何内容。这将间接地修改一组子对象,但父对象是进行修改的对象,因此它应该已经知道如何有效地处理这些修改。例如,每次用户调整窗口大小时,它都会这样做
  • 如果父级的多个布局相关属性发生更改,但没有子级的属性发生更改,则只应挂起父级。推理与上一点相同,只是挂起父级,因此它本身只生成一个布局事件

投票赞成,因为这是一个非常可靠的问题。我必须反对你在这里的陈述:这只影响直接子控件,而不是在层次结构的更深层添加控件时!一篇支持我的反对意见的MSDN文章来自文章:“记住,SuspendLayout仅阻止对特定控件执行布局事件。例如,如果将控件添加到面板,则必须为面板而不是父窗体调用SuspendLayout和ResumeLayout。”
SuspendLayout
不是关于禁止绘制例程,而是关于
Layout
事件。此事件由子事件触发,而不是由父事件触发。它是向上滴,而不是向下滴。