WinForm-窗体、容器、控件的绘制顺序

Paint事件   

    C#中,窗体、容器、控件的绘制有着一定的顺序。首先绘制容器里的控件,然后绘制窗体上的容器,最后再绘制窗体。可以在控件、容器及窗体的Paint事件处理程序中加入MessageBox.Show方法,然后就可以看出它们的执行顺序:Control.Paint--->Container.Paint--->Form.Paint

    大多数控件都有Paint事件,但有一些控件不具有,如ListBox控件。System.Windows.Forms.Control类是所有控件(没有完全考察)的基类,所以,直接继承它的控件都有Paint事件。但是ListBox是继承至System.Windows.Forms.ListControl,虽然ListControl也继承至Control类,但是它屏蔽掉了Paint事件。(不知道是怎么实现的???)


Load事件

    我们再来看看Load事件和Paint事件的执行顺序。用同样的方法可以发现:窗体的构造方法先于Load事件,Load事件先于Paint事件发生。所以,一定要注意你的一些初始化代码的放置位置。初始化代码最好放在窗体的构造方法中,并且要在InitializeComponent()方法之后。只有窗体或者UserControl这类的最上层的Windows界面才具有Load事件。   


Refresh方法

    每次调用窗体的Refresh()方法时,都将按照控件、容器、窗体的顺序触发它们的Paint事件,执行相应的事件处理程序。也可以只调用某个控件的Refresh方法,而不重绘整个窗体。如果触发某个Container的Paint事件,那么Container内的所有控件的Paint事件也将被触发。

你可能感兴趣的:(Winform,Winform,Control)