繁体   English   中英

C#图形无效

[英]C# Graphics Invalidate

我想我很想了解Invalidate方法...我试图绘制一个正方形,正方形的左上角在mousedown处鼠标的位置,然后右下角是鼠标的当前位置。 下面是在MouseMove事件上触发的方法。 父级是带有pictureBox子级的面板。 (我试图在这些之上。)

问题似乎出在pictureBoxMain.Invalidate() 注释掉后,代码将按预期方式运行,并绘制出数以百计的正方形。

[Graphics g由pictureBox创建,因此为什么要在pictureBox上调用Invalidate方法。]

当我取消注释无效行时,随鼠标移动绘制一个框,但是一旦停止移动,该框就会消失。 我无法为自己的一生而努力。 当我尝试调试代码时,似乎在鼠标不移动时正在调用MouseMove方法,这没有任何意义。

任何帮助是极大的赞赏!

private void pictureBoxMain_MouseMove(object sender, MouseEventArgs e)
    {
        if (MouseDrawLeft)
        {
            //Move
        }
        else if (MouseDrawRight)
        {
            MouseLast = e.Location;
            if (MouseFirst != MouseLast)
            {
                pictureBoxMain.Invalidate();

                Point bl = new Point(MouseFirst.X, MouseLast.Y);
                Point tr = new Point(MouseLast.X, MouseFirst.Y);

                g.DrawLine(pen, MouseFirst, tr);
                g.DrawLine(pen, MouseFirst, bl);
                g.DrawLine(pen, bl, MouseLast);
                g.DrawLine(pen, tr, MouseLast);
            }
        }
    }

每个组件(按钮,文本框,窗口...)都有其Paint方法。 Windows会定期调用此功能(例如每秒50x)以绘制对象。

您要做的是在对象上画一些东西-但是在一毫秒之内,它消失了,因为Paint方法覆盖了它。 您需要覆盖框架的Paint方法,然后在该处进行绘画-这样,您的图形将在Windows每次询问时进行绘制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM