0

初学者在这里进入 C#.. 我正在制作一个涉及绘图的程序。基本上,每当我移动鼠标进行绘制时,图像上的实际线条就会出现延迟——而且它比预期的更……直。它曾经工作得很好,但在某些时候我想出了点问题 - 不记得我当时做了什么,所以很难追溯。我试图在一个新的解决方案中复制程序的绘图部分,并且它似乎工作正常..

我会发布 .exe 文件,以便您明白我的意思,但我不确定我们是否可以在此处发布可执行文件。

编辑:我已经确认代码可以正常工作,请查看 sa_ddam213 的答案以获取代码示例。似乎它在其他人的计算机上运行良好,所以我完全糊涂了。

4

3 回答 3

1

哟正在为每个鼠标移动事件创建一个新的 Graphic 和 Pen 对象,这将比在Mouse_Down事件中创建这些变量要慢得多。

这样的事情可能会更快一些。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        b = new Bitmap(this.Width, this.Height);
    }

    private Graphics _graphics;
    private Pen _pen;
    private int pX = 0;
    private int pY = 0;
    private bool paint = false;
    private Bitmap b;

    private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
    {
        pX = e.X;
        pY = e.Y;
        _graphics = Graphics.FromImage(b);
        _pen= new Pen(Color.Black, 3);
        paint = true;
    }

    private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
    {
        if (paint)
        {
            _graphics.DrawLine(_pen, pX, pY, e.X, e.Y);
            pictureBox1.BackgroundImage = b;
            pictureBox1.Refresh();
            pX = e.X;
            pY = e.Y;
        }
    }

    private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
    {
        paint = false;
        _graphics.Dispose();
        _pen.Dispose();
    }
}
于 2013-02-12T20:24:36.240 回答
0

可能是你的 VGA 有问题。与另一台 PC 核对并告知我们

于 2013-02-13T11:10:42.467 回答
0

尝试使用pictureBox1.Refresh() 而不是pictureBox1.Invalidate()

您可能还需要在 pictureBox1.BackgroundImage = b 之后移动它

此外,在 MouseDown 中,您需要设置this.Capture = true,在 MouseUp 中,您应该设置this.Capture = false。如果您不这样做并且在鼠标光标位于其他应用程序上时释放鼠标按钮,您的将永远不会收到 MouseUp 消息。

于 2013-02-12T20:06:03.010 回答