如何用最近的鼠标位置重新绘制单个椭圆

本文关键字:绘制 单个椭 新绘制 最近 何用 鼠标 位置 | 更新日期: 2023-09-27 18:09:35

我希望在MouseMove()事件期间在屏幕上绘制椭圆,但我希望它只从起点绘制最近的椭圆到当前鼠标位置。目前,它正在为每个正在注册的鼠标位置绘制一个椭圆。如果我只是使用MouseDown()和MouseUp()事件,我就可以很容易地画出椭圆,而不需要显示椭圆,但我希望用户在移动鼠标时能够看到椭圆,这样他们就可以确切地知道他们将其放置在哪里。有人知道我是怎么做到的吗?

我现在的代码如下:

private void pnlDraw_MouseDown(object sender, MouseEventArgs e)
{
    initialX = e.X;
    initialY = e.Y;
    previousX = e.X;
    previousY = e.Y;
    isPainting = true;
}
private void pnlDraw_MouseMove(object sender, MouseEventArgs e)
{
    if (isPainting)
    {
        switch (currentDrawType)
        {
            case DRAWTYPE.ELLIPSE:
            {
                DrawEllipse(e);
                break;
            }
            default:
            {
                break;
            }
        }
    }
}
private void DrawEllipse(MouseEventArgs e)
{
    pen = new Pen(Color.Black);
    Graphics graphics = pnlDraw.CreateGraphics();
    graphics.DrawEllipse(pen, initialX, initialY, e.X - initialX, e.Y - initialY);
    previousX = e.X;
    previousY = e.Y;
    graphics.Dispose();
}

任何帮助都将非常感激!

如何用最近的鼠标位置重新绘制单个椭圆

当你在屏幕上画东西时,你应该做的第一件事就是清除之前显示的东西。否则,您只需在现有图形的顶部绘制。

在WinForm中,它通常在OnBackgroundPaint()方法中处理,这是一种简单的方式,说明它在那里,你应该清除背景。

应该是这样的:

e.Graphics.FillRectangle(new SolidBrush(MyBackgroundColor), e.ClipRectangle);

或者如果不是绘图事件:

graphics.FillRectangle(new SolidBrush(MyBackgroundColor), 0, 0, MyWidth, MyHeight);
在上面绘制任何东西之前应该调用

。这也是一个保证,您的绘图区域已准备好绘制在其上。