以下是在网上看到的一些资料,感觉对paint事件介绍的比较详细,你可以参考参考:
一、 Paint事件的用处
Paint事件主要用于告诉程序什么时候要在窗口上显示输出。
在C#语言中几乎所有控件全部都是通过这个Paint事件来进行绘制的。
想正确的使用Paint事件首先我们要先了解跟这个Paint事件有关联的PaintEventHandler委托,PaintEventHandler是定义在System.Windows.Forms名词空间下的委托,这个委托参数中有一个PaintEventArgs的类,而这个类呢就对我们进行绘制时相当有用了。
二、 PaintEventArgs类
Graphics
Graphics
读
获取用于进行绘制的图形
这个属性就是用来获取当前你要绘制的控件的大小方位等一系列数据,但是我们这只知道这些还是绘制不出来,我们还需要一个工具让我们来进行绘制,这个工具就类似与我们要画画时需要的画笔一样,而在C#语言中就有这么一个工具,这个工具的名称叫做Graphics类。当我们想要在窗体上进行绘制时,就要使用这个类了。
例: Graphics grfx = e.Graphics;
三、 Graphics类方法
返回值类型
方法名称
说明
void
DrawString
用来在窗体上绘制文本字符串。
这个方法中有很多个参数需要我们填写,下面我们就来了解一下这个方法中都有哪些参数是我们应该学习的。
参数类型
参数名称
参数说明
string
Text
用于绘制文本字符串
Font类
Font类对象
用于设置绘制的文本字符串大小以及字体。
Brush
Brushes( 静态类)
用于设置绘制的文本字符串颜色。
float
x
用于设置绘制的文本字符串在窗体的位置X。
float
y
用于设置绘制的文本字符串在窗体的位置Y
例:
using System;
using System.Drawing;
using System.Windows.Forms;
namespace Name
{
class CA
{
static void Main()
{
Form f1 = new Form();
f1.Paint += new PaintEventHandler(f1_Paint);
Application.Run(f1);
}
static void f1_Paint(object sender, PaintEventArgs e)
{
Graphics grfx = e.Graphics;
grfx.DrawString("aa", new Font("宋体",20), Brushes.Lavender, 0, 0);
}
}
}
我们在这段代码中使用的Font类是用来设置文本字体与大小的字体类。
这个类也跟其他类一样使用。
例:Font f1 = new Font(“文本字体”,字体大小);
四、 Paint事件的触发时机
1、窗体显示时触发Paint事件
2、当窗体无效区域变有效时触发Paint事件
3、人为调用刷新函数时触发Paint事件。
五、 OnPaint方法
OnPaint方法是Form类中定义的一个方法,
它主要是用来调用所有已经安装的Paint事件
,从而达到Paint事件中所有的功能。
我们在使用OnPaint方法时必须要先继承自Form类,之后进行重载才可以使用。
例:
using System;
using System.Drawing;
using System.Windows.Forms;
namespace Name
{
class MyForm : Form
{
static void Main()
{
Application.Run(new MyForm());//new 才是窗体根源
}
public MyForm()
{
this.Text = "OnPaint方法";
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Graphics grfx = e.Graphics;
grfx.DrawString("BB", new Font("宋体", 20), Brushes.Beige, 0, 0);
}
}
}
六、 OnPaint方法要点:
1、所有Form类中的事件全都是通过On方法实现的
2、On参数中的e参数与事件Paint事件中的参数e是同一个对象。
3、如果重写过父类中On函数并且没调用base.OnPaint函数,那么将来在用本类构造对象就不会触发。On方法处理整个事件时会比Paint速度快可以调用父类东西this代表父类 Base代表子类
以上摘自:http://leoblog.blog.sohu.com/111552892.html
处理Paint事件:
Paint事件是窗体程序的一个最重要的事件,它描绘了窗体客户区!是一个频繁调用的事件。
委托类型:
public delegate void PaintEventHandler(object sender,PaintEventArgs e);
Paint事件是Control类定义的一个事件。
示例代码:
using System;
using System.Drawing;
using System.Windows.Forms;
namespace ConApp
{
class Program
{
static byte ctr=0; //Paint事件频繁调用计数器
//Paint事件处理程序
static void MyPaintEventHandler(object sender,PaintEventArgs e)
{
Form form=(Form)sender;
//绘制客户区颜色为白色 背景色
Graphics graphics=e.Graphics;
graphics.Clear(Color.White);
ctr++;
Console.WriteLine("描绘事件{0}",ctr);
//显示文本
Font font=form.Font;
Brush brush=Brushes.Black;
graphics.DrawString("显示文本",font,brush,250,50);//
}
static void Main(string[] args)
{
Form form=new Form();
form.Text="我的窗体";
form.BackColor=Color.BlanchedAlmond;
form.Width *=2;
form.Height /=2;
form.FormBorderStyle=FormBorderStyle.FixedSingle;
form.MaximizeBox=false;
form.Cursor=Cursors.Hand; //鼠标手掌形
form.StartPosition=FormStartPosition.CenterScreen;
//订阅Paint事件
form.Paint+=new PaintEventHandler(MyPaintEventHandler);
Application.Run(form);
}
}
}
两个窗体共用一个Paint事件,下面的示例能帮助你更好的理解Paint事件!
using System;
using System.Drawing;
using System.Windows.Forms;
namespace ConApp
{
class Program
{
static Form form1,form2;
//声明两个窗体变量
//Paint事件处理程序
//两个窗体,只有一个窗体会调用它
static void MyPaintEventHandler(object sender,PaintEventArgs e)
{
Form form=(Form)sender;
Graphics graphics=e.Graphics;
string str;
if(form==form1)
{
str="111111 显示文本---->>窗体一";
}
else
{
str="222222 显示文本----->>窗体二";
}
graphics.DrawString(str,form.Font,Brushes.Black,50,80);
}
static void Main(string[] args)
{
form1=new Form();
form2=new Form();
//form1属性设置
form1.Text="窗体 1 ";
form1.BackColor=Color.White;
form1.Paint+=new PaintEventHandler(MyPaintEventHandler);
//form2属性设置
form2.Text="窗体 2 ";
form2.BackColor=Color.White;
form2.Paint+=new PaintEventHandler(MyPaintEventHandler);
form2.Show();
Application.Run(form1);
}
}
}
一个窗体拥有两个Paint事件处理程序,如果存在不止一个同事件处理程序,程序会按顺序调用所有的处理程序。
using System;
using System.Drawing;
using System.Windows.Forms;
namespace ConApp
{
class Program
{
//Paint事件处理程序1
static void MyPaintEventHandler1(object sender,PaintEventArgs e)
{
Form form=(Form)sender;
Graphics graphics=e.Graphics;
graphics.DrawString("事件处理程序1",form.Font,Brushes.Black,0,100);
}
//Paint事件处理程序2
static void MyPaintEventHandler2(object sender,PaintEventArgs e)
{
Form form=(Form)sender;
Graphics graphics=e.Graphics;
graphics.DrawString("事件处理程序2",form.Font,Brushes.Black,0,0);
}
static void Main(string[] args)
{
Form form=new Form();
form.Text="微湖cshcn";
form.BackColor=Color.White;
form.Paint+=new PaintEventHandler(MyPaintEventHandler1);
form.Paint+=new PaintEventHandler(MyPaintEventHandler2);
Application.Run(form);
}
}
}
以上摘自:http://hi.baidu.com/%D4%E7%B0%B2%D6%D0%B9%FA/blog/item/757b35caedd88418bf09e63d.html
当重绘控件时会引发 Paint 事件。 该事件将 PaintEventArgs 的实例传递给用来处理 Paint 事件的方法。
创建具有不同可视外观的新自定义控件或继承的控件时,必须提供代码以通过重写 OnPaint 方法呈现此控件。