控件什么时候重绘?如果不自己写Paint事件,重绘控件的时候究竟会画些什么?
1个回答
展开全部
protected override void OnPaint(PaintEventArgs pe)
{
//画扇形
Graphics g = pe.Graphics;
foreach (var sensor in Sensors)
{
DrawPie(sensor, g);
}
//画路径
if(PointDs.Count>=1)
{
if (PointDs.Count > 1)
{
PointF[] points = new PointF[PointDs.Count];
for (int i = 0; i < PointDs.Count; i++)
{
points[i] = (PointF) PointDs[i];
}
g.DrawLines(new Pen(LColor, 2), points);
foreach (var pointD in PointDs)
{
DrawPoint(g, pointD, 2);
}
}
else
{
DrawPoint(g, PointDs[0], 1);
}
}
base.OnPaint(pe);
}
上面是我自己定义的一个控件,功能就是在空间上显示一些扇形、点和线。你会看到最后一行代码:base.OnPaint(pe);这个是我自定义控件基类的绘制函数。你可以想象,当你触发Paint事件后,基类调用OnPaint()函数,基类的基类也调用自己的OnPaint()这样直到底层,程序一层一层的向下调用OnPaint(),把窗口上需要的线条一点点的描绘出来。(只不过这些都发生在一瞬间你感觉不出来)
至于什么时候会重绘,分为两种,主动和被动。被动方式有很多,比如当你的鼠标盖住窗口上的一块,其实这块区域就是重绘了。主动的话就是调用诸如Refresh()、Invalidate()等函数强制使得一块区域无效,这样程序就会触发重绘函数重新绘制指定区域。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询