C# 图形无效

本文关键字:无效 图形 | 更新日期: 2023-09-27 18:32:24

我想我错过了对无效方法的理解...我正在尝试绘制一个正方形,正方形的左上角位于鼠标向下的位置,然后右下角是鼠标的当前位置。下面是在鼠标移动事件上触发的方法。父级是带有 pictureBox 子项的面板。(我试图在这些之上画画。

问题似乎出在pictureBoxMain.Invalidate().当注释掉时,代码的行为符合预期并绘制了无数个方块。

[图形g是由pictureBox创建的,因此我在pictureBox上调用Invalid方法。

当我取消注释掉无效行时,当鼠标移动时会绘制一个框,但一旦它停止移动,框就会消失。我一辈子都想不通为什么。当我尝试调试代码时,似乎在鼠标不移动时正在调用 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);
            }
        }
    }

C# 图形无效

每个组件(按钮、文本框、窗口...)都有其 Paint 方法。这是由Windows定期调用的(如每秒50倍)来绘制对象。

你所做的是在对象上绘制一些东西 - 但在一毫秒内,它消失了,因为 Paint 方法覆盖了它。您需要覆盖框架的 Paint 方法并在那里绘画 - 这样,每次 Windows 询问时都会绘制绘图。