C# 无法删除c中的绘图线#

C# 无法删除c中的绘图线#,c#,C#,不知道如何删除鼠标移动时绘制的线条在窗体上使用除“绘制”以外的任何其他方法绘制都是一个坏主意。你不能删除一条线,它只能画在上面 因此,您应该在覆盖的OnPaint方法中绘制所有图形。我建议如下: private void Form1_MouseDown(object sender, MouseEventArgs e) { isDrawing = true; currentPoint = e.Location; } private void Form1_MouseMove(object

不知道如何删除鼠标移动时绘制的线条

在窗体上使用除“绘制”以外的任何其他方法绘制都是一个坏主意。你不能删除一条线,它只能画在上面

因此,您应该在覆盖的
OnPaint
方法中绘制所有图形。我建议如下:

private void Form1_MouseDown(object sender, MouseEventArgs e)
{
  isDrawing = true;

  currentPoint = e.Location;
}

private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            Graphics bedLine = this.CreateGraphics();
            Pen bedp = new Pen(Color.Blue, 2);
            if (isDrawing)
            {
                bedLine.DrawLine(bedp, currentPoint, e.Location);
                currentPoint = e.Location;
            }
            bedp.Dispose();
        }
情况就是这样:

  • 当按下鼠标时,我们将该位置保存在
    startPoint
    中,并将
    isDrawing
    设置为
    true
  • 移动鼠标时,我们将新点保存在
    currentPoint
    中,并调用
    Invalidate
    告诉
    Form1
    它应该被重新绘制
  • 释放鼠标后,我们将
    isDrawing
    重置为
    false
    ,然后再次调用
    Invalidate
    以无行重画
    Form1
  • OnPaint
    绘制
    Form1
    (通过调用基本实现)和(如果
    isDrawing
    true
    )从
    startPoint
    currentPoint


除了覆盖
OnPaint
之外,您还可以订阅
Form1
Paint
事件,就像使用鼠标事件处理程序一样使用
OnPaint
以外的任何其他方法绘制表单都是一个坏主意。你不能删除一条线,它只能画在上面

因此,您应该在覆盖的
OnPaint
方法中绘制所有图形。我建议如下:

private void Form1_MouseDown(object sender, MouseEventArgs e)
{
  isDrawing = true;

  currentPoint = e.Location;
}

private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            Graphics bedLine = this.CreateGraphics();
            Pen bedp = new Pen(Color.Blue, 2);
            if (isDrawing)
            {
                bedLine.DrawLine(bedp, currentPoint, e.Location);
                currentPoint = e.Location;
            }
            bedp.Dispose();
        }
情况就是这样:

  • 当按下鼠标时,我们将该位置保存在
    startPoint
    中,并将
    isDrawing
    设置为
    true
  • 移动鼠标时,我们将新点保存在
    currentPoint
    中,并调用
    Invalidate
    告诉
    Form1
    它应该被重新绘制
  • 释放鼠标后,我们将
    isDrawing
    重置为
    false
    ,然后再次调用
    Invalidate
    以无行重画
    Form1
  • OnPaint
    绘制
    Form1
    (通过调用基本实现)和(如果
    isDrawing
    true
    )从
    startPoint
    currentPoint


除了覆盖
OnPaint
之外,您还可以订阅
Form1
Paint
事件,就像您使用鼠标事件处理程序一样,而不必讨论此代码的更一般性问题,看起来您在那里的某个地方缺少了
Form1\u MouseUp
。private void Form1\u MouseUp(对象发送方,MouseEventArgs e){isDrawing=false;}Graphics bedLine=this.CreateGraphics();由于这是大错特错,其余的都没有意义。请学习如何在Winforms中绘制!不要缓存或存储Grahics对象。事实上,您不应该首先使用CreateGraphics事件,因为Graphics对象永远不会停留在范围内,它生成的图形也不会持久(即在最小化最大化序列中生存)…无法仅删除图形对象??仅删除基线?如果不涉及此代码更一般的问题,看起来您在其中的某个地方缺少了一个
Form1_MouseUp
。private void Form1_MouseUp(对象发送方,MouseEventArgs e){isDrawing=false;}Graphics bedLine=this.CreateGraphics();由于这是大错特错,其余的都没有意义。请学习如何在Winforms中绘制!不要缓存或存储Grahics对象。事实上,您不应该首先使用CreateGraphics事件,因为Graphics对象永远不会停留在范围内,它生成的图形也不会持久(即在最小化最大化序列中生存)…没有办法只删除图形对象??只删除基线?没有办法只删除图形对象??只删除基线?不,
Graphics
仅用于绘制。您的线本身不是图形对象或类似的东西。因此,一旦绘制,像素就在那里,直到在那里绘制其他东西。没有办法t删除图形对象??只是删除基线?不,
Graphics
只是用于绘制。您的线本身不是图形对象或类似的东西。因此,一旦绘制,像素就在那里,直到在那里绘制其他东西。