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
只是用于绘制。您的线本身不是图形对象或类似的东西。因此,一旦绘制,像素就在那里,直到在那里绘制其他东西。