OnPaint / OnPaintBackground的执行顺序,用于控件集合

时间:2014-07-06 14:46:51

标签: .net winforms

假设您有一个容器控件(例如,表单),其中包含其他控件的集合。子控件可以排列为层次结构,即一些子控件嵌套在其他子控件(父,子,孙子等等)中。

  1. 那么,父,子,(和孙子)控件的OnPaintOnPaintBackground方法的执行顺序是什么?
  2. Invalidate如何适应这里?

1 个答案:

答案 0 :(得分:1)

汉斯是正确的 - 回到前面。所以父母将首先被绘制,然后是孩子。子项将按ChildIndex的相反顺序绘制,可以使用parent.GetChildIndex(child)获得。子索引0位于顶部,因此将首先绘制最高子索引,最后绘制子索引0。

绘图以深度优先的方式完成,因此在绘制下一个控件之前绘制一个控件的所有子/孙。

Control.Invalidate()导致重绘控件的整个边界框,因此将为控件及其子控件调用OnPaint。请注意,OnPaint将异步执行,因此您的代码将继续运行,而无需等待绘制完成。