控件什么时候重绘?如果不自己写Paint事件,重绘控件的时候究竟会画些什么?

 我来答
ptlouhong
2014-02-19 · 超过17用户采纳过TA的回答
知道答主
回答量:45
采纳率:0%
帮助的人:33.9万
展开全部
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()等函数强制使得一块区域无效,这样程序就会触发重绘函数重新绘制指定区域。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式