序言
用了onpaint事件重绘
与绘制有关的函数
Paint()
OnPaint()
Invalidate()
前两个函数的执行顺序,如果在OnPaint()中有base.OnPaint(e)函数,就相当于执行外部的Paint()函数。
Invalidate()运行后,会通知系统要重绘控件,但是不是立即重绘,而是运行完所有程序之后再重绘。
protected override void OnPaint(PaintEventArgs e)//重写OnPaint方法 { base.OnPaint(e);//先执行基类的OnPaint方法 Graphics g = e.Graphics; Pen p = new Pen(Color.Red); g.DrawEllipse(p, 40, 40, 100, 100); g.Dispose(); p.Dispose(); }
一个控件应该什么时候绘制主要有两个 :
一个是 系统来确定 这个控件需要绘制 比如 最小化后在最大化 那么此时 系统会发出WM_PAINT 消息来告知控件 你需要重绘了
另一个就是 人为的调用this.Invalidate()或者this.Invalidate(Rectangle)来自己触发一次重绘
自己开发的WinForm控件通常有三种类型:复合控件(Composite Controls),扩展控件(Extended Controls),自定义控件(Custom Controls)。
复合控件:将现有的各种控件组合起来,形成一个新的控件,将集中控件的功能集中起来。
扩展控件:在现有控件的控件的基础上派生出一个新的控件,为原有控件增加新的功能或者修改原有控件的控能。
自定义控件:直接从System.Windows.Forms.Control类派生出来。Control类提供控件所需要的所有基本功能,包括键盘和鼠标的事件处理。自定义控件是最灵活最强大的方法,但是对开发者的要求也比较高,你必须为Control类的OnPaint事件写代码,你也可以重写Control类的WndProc方法,处理更底层的Windows消息,所以你应该了解GDI+和Windows API。
本系列文章主要介绍自定义控件的开发方法。
控件(可视化的)的基本特征:
1. 可视化。
2. 可以与用户进行交互,比如通过键盘和鼠标。
3. 暴露出一组属性和方法供开发人员使用。
4. 暴露出一组事件供开发人员使用。
5. 控件属性的可持久化。
6. 可发布和可重用。
资料
https://www.cnblogs.com/tianma3798/p/3960663.html
https://www.cnblogs.com/feiyangqingyun/category/273570.html
https://www.cnblogs.com/peterzb/archive/2009/06/18/1505438.html