使用C#.NET Compact Framework我正在创建一个GUI控件,它包含和控制也是自定义控件的子项(即System.Windows.Forms.UserControl)。子元素和父元素都有自定义绘图例程(OnPaint)。为了更好地理解和优化绘图程序,我想澄清.NET下的绘图顺序。
(1)当第一次显示整个事物时,以下事件的正确顺序是什么:
parent.OnPaintBackground
child.OnPaintBackground
parent.OnPaint
child.OnPaint
(2)Control.Invalidate()调用的顺序是否会影响OnPaint / OnPaintBackground事件的顺序?
(3)如果子控件调用自己的child.Invalidate(),父也会得到OnPaint / OnPaintBackground事件吗?
(4)系统如何确定哪个控件是哪个控件是父项,反之亦然? Control.Parent是这种关系的唯一标志吗?
答案 0 :(得分:1)
这不是一个真正的答案,但您可以使用一些Debug.Print()
语句并编写一个快速程序来自己测试1-3。将订阅者添加到您感兴趣的事件中,并查看它们何时发生。然后按照2-3中的建议执行操作,并更改Invalidate()
次调用的顺序并观察。
就像我说的那样,不是答案,但肯定是一种发现答案的方法。
至于#4,就像你暗示的那样,这种关系是双向的。您已经与Control.Parent
(child-> parent)保持一半关系。另一半是Control.Controls
集合(parent-> children)。根据我的理解,将这种关系视为一个无序的大树。