学习自定义控件

      今天晚上在宿舍狠狠得看了一点关乎自定义控件与GDI+相结合的例子,终于看得懂一点了...原来每个控件的细节外观都是一点点画出来的,也许这需要对色彩有较强的敏感度,但没事,我有时间慢慢测试。现在不仅要自定义按钮,同时还要自定义窗体和菜单的外观,有点计划去模仿QQ2009的效果,嘿嘿~不过在自定义控件方面还是有很多空白,期待明天晚上能有所突破吧~明天晚上就继续学习,研究窗体的画图......
      后来我发现原来对自定义控件每做一步(包括鼠标动作、键盘动作以及控件自身的任何变化)它都重新画一遍图形,都会触发自定义控件的OnPaint事件(绘制图形事件),但这也是一瞬间的事,你几乎感觉不到它的闪烁,除了你事先定义的变化之外。
      当然,你所做的每一步动作控件是不会自己触发OnPaint事件的,这就要你自己去设置。其实很简单,设置就一个语句:this.Invalidate();    这句表示强制使当前图形无效而重新绘制图形,就会调用OnPaint事件,而此时你的OnPaint事件里面都是所有的对控件外观的重新绘制方法,所以就刷新了外观咯。将此语句加在你自定义控件的事件最后,那就OK了。
      大体的机制就是这样。明白了这个原理,就仿佛学习C#又懂得了面向对象,以后的路子就宽敞多了。从此不会为绘制控件外观和消除某一部分的图形而烦恼,因为外观一直在改变,刷新重新绘制,只是你没察觉而已。
      加油,我离我梦心日记本V2.0又近了一步。

原文地址:https://www.cnblogs.com/saper/p/1355772.html