我希望在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();
}

任何帮助将不胜感激!

===============>>#1 票数:1 已采纳

在屏幕上绘图时,您应该做的第一件事就是清除以前显示的内容。 否则,您只需在现有图形之上绘制。

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

它看起来应该像这样:

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

或如果不是绘画事件:

graphics.FillRectangle(new SolidBrush(MyBackgroundColor), 0, 0, MyWidth, MyHeight);

并且应在其上绘制任何内容之前调用它。 也可以保证在其上绘制绘图区域。

  ask by si2zle translate from so

未解决问题?本站智能推荐: