但是如何重写控件的OnPaint事件呢?比如说绘图是在PictureBox中绘制的,那么如何重写PictureBox的OnPaint事件?

我们无法直接在窗体的代码中重写控件的OnPaint事件,只能重写窗体的OnPaint事件。

重写控件的OnPaint事件,必须创建一个新的控件。这个控件继承Windows的控件,然后在创建的控件中重写控件的OnPaint事件。

以PictureBox为例:

//定义一个新的控件,继承PictureBox控件

public class myPictureBox : PictureBox
{

//自定义控件的构造函数
public myPictureBox()

//重写控件的OnPaint属性

protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);

//绘图
}

使用这种方法,就可以重写任何一个控件的OnPaint事件了。

本文是利用 C# 实现中国象棋的棋盘绘制,以及初始化布局,并不实现中国象棋的对弈逻辑。仅供学习参考使用。 绘制中国象棋棋盘,竖线九条,横线十条。再中间绘制‘楚河’,‘汉界’ 。 绘制棋子,然后将棋子布局在棋盘上即可。 涉及知识点: 用户 控件 :用于实现棋盘的绘制, 重写 On Paint ( Paint EventArgs e) 方法 。 Matrix:封装表示几何变换的 3×3 仿射矩阵。本例中主要用于旋转绘制反方的‘汉界’。 GraphicsPath:表示一系列相互连接的直线和曲线。本例中主要用于绘制圆形棋子。 效果图如下: 棋盘核心代码如下: 对于.Net所写一般程序来说,都属于托管程序,内存的释放和回收是由Garbage Collector完成。但是相对于栈上内存操作而言,GC回收堆上的内存,会消耗更多的CPU时间,这方面的内容可以参看这篇文章。http://blog.csdn.net/knight94/archive/2006/08/05/1023352.aspx 因此如果让GC不停的释放和回收内存,会造成程序性能的下降 重写 On Paint 方法 Overriding the On Paint Method03/30/2017本文内容 重写 .NET Framework 中定义的任何 事件 的基本步骤都是相同的,并且在以下列表中进行了总结。The basic steps for overriding any event defined in the .NET Framework are identical and are ... 入行已经7,8年了,一直想做一套漂亮点的自定义 控件 ,于是就有了本系列文章。 GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:https://gitee.com/kwwwvagaa/net_winform_custom_control.git 如果觉得写的还行,请点个 star 支持一下吧 欢迎前来交流探讨: 企鹅群5... (一)重绘时候经常会用到On Paint ()和 Paint ,它们有什么区别呢?    1.On Paint 方法 是对一个 控件 来说的;而 Paint 事件 是对一个 控件 对象来说的。它们中前者相当于是类的一个成员函数,而后者相当于是类的一个函数指针类型的变量(会因对象的不同而不同)。        2.On Paint 方法 引发 Paint 事件 ,所以 重写 On Paint 方法 ,一定要调用base.On Paint ,否则就不会引发 Paint 事件 了。On Paint 原形应该类似以下形式(从中便可以看出): 1:具体实现如下: 原理:通过继承Button类, 重写 On Paint () 方法 ,使用画笔工具重绘 控件 样式。 public class myButton : System. Windows .Forms.Button   大家在创建winform的时候,是不是很多时候都需要建立父窗体,然后再父窗体基础上添加子窗体,然后再单击 事件 的时候还有可能弹出好多的窗口,今天给大家带来有关panel 控件 福利。   Panel 控件 相当于在我们主窗体中添加了一个容器,通过这个容器把我们需要用的 控件 直接在这个容器中显示,当然也包括我们的窗体,这样每次单击 事件 就只有这一个窗体中的 控件 内容在变化。 (有关panel和子父窗体... 1 private Color _BorderColor = Color.Black; 3 [Browsable(true), Description("边框颜色"), Category("自定义分组")] 4 public Color Bo. Invalidate() 一个 控件 应该什么时候绘制主要有两个 : 一个是 系统来确定 这个 控件 需要绘制 比如 最小化后在最大化 那么此时 系统会发出WM_ PAINT 消息来告知 控件 你需要重绘了 另一个就是 人为的调用this.Invalidate()或者this.Invalidate(Rectangle)来自己触发一次重绘 对于第一种 那是系统