如何更快地处理C#中的MouseMove事件

时间:2013-02-12 11:58:26

标签: c# .net events mouse picturebox

我正在尝试在pictureBox中显示的图像上绘制一些内容。我正在使用事件处理程序进行鼠标活动:onMouseUp,onMouseMove和onMouseDown。

private void onMouseDown(object sender, MouseEventArgs e)
    {
        mouseDown = true;
    }

    private void onMouseMove(object sender, MouseEventArgs e)
    {
        if (mouseDown)
        {
            using (Graphics g = pictureBox.CreateGraphics())
            {
                g.FillEllipse(Brushes.Black, e.X - size, e.Y - size, size * 2, size * 2);
            }
        }
    }
private void onMouseUp(object sender, MouseEventArgs e)
    {
        mouseDown = false;

        using (Graphics g = pictureBox.CreateGraphics())
        {
            g.FillEllipse(Brushes.Black, e.X - size, e.Y - size, size * 2, size * 2); //just in case user just clicks instead of move the mouse
        }
    }

我正在尝试模拟当鼠标移动到pictureBox上时绘制指定大小(半径)圆的画笔工具。移动速度很慢但是当移动速度更快时,PictureBox似乎只捕获了一些事件,并且很多圈子被跳过而没有被绘制。特别是当半径很小时。

我该怎么做才能让它更快更顺畅?

1 个答案:

答案 0 :(得分:3)

移动鼠标时,鼠标指针移动的每个像素都不会得到MouseMove事件。您将以相当一致的时间间隔获得它们,因此鼠标移动得越快,您获得的点就越远。这个特别的细节你做不了多少。

您需要做的是存储最后一个接收点的位置,并在最后一个点和新点之间的每个点绘制一个椭圆。