假设您有一个容器控件(例如,表单),其中包含其他控件的集合。子控件可以排列为层次结构,即一些子控件嵌套在其他子控件(父,子,孙子等等)中。
OnPaint
和OnPaintBackground
方法的执行顺序是什么?Invalidate
如何适应这里?答案 0 :(得分:1)
汉斯是正确的 - 回到前面。所以父母将首先被绘制,然后是孩子。子项将按ChildIndex的相反顺序绘制,可以使用parent.GetChildIndex(child)
获得。子索引0位于顶部,因此将首先绘制最高子索引,最后绘制子索引0。
绘图以深度优先的方式完成,因此在绘制下一个控件之前绘制一个控件的所有子/孙。
Control.Invalidate()
导致重绘控件的整个边界框,因此将为控件及其子控件调用OnPaint
。请注意,OnPaint
将异步执行,因此您的代码将继续运行,而无需等待绘制完成。