我正在开发一个简单的Windows窗体绘制应用程序。我在清理面板时遇到问题。我用来绘制的代码是
private void panel1_Paint(object sender, PaintEventArgs e)
{
Graphics g = Graphics.FromImage(tempDraw);
Pen myPen = new Pen(foreColor, lineWidth);
g.DrawLine(myPen, x1, y1, x2, y2);
myPen.Width = 100;
myPen.Dispose();
e.Graphics.DrawImageUnscaled(tempDraw, 0, 0);
g.Dispose();
}
如何清除面板?
答案 0 :(得分:2)
是否正在绘制Panel实例的绘制处理程序?如果没有,那么在面板上调用Invalidate会这样做。
但是您可能会持久保存绘图项目,因此要清除它们,您需要删除绘制的内容,然后调用Invalidate。您也可以使用FillRect为Panel填充特定的颜色,但这将是一个肮脏的解决方法,不适合您的最终设计。
您还应该查看CodeProject.com以获取示例like this one,以便了解在创建此类绘图应用时需要处理的内容。
修改强>
根据编辑的答案,您无法使用现有逻辑清除面板。你正在绘制表单的Paint处理程序,它将在需要重绘时发生。这意味着您应该改变您的方法。你需要在Paint处理程序中使用某种条件,它决定它是否会绘制任何东西。这是绘图对象的持久性进入的地方。如果要创建绘图程序,则必须在面板对象上处理鼠标Down,Up和Move事件,并将数据存储在点数组中。 (作为一种绘图的示例。)然后在您的Paint处理程序中,如果Points []不为空,则绘制点。否则你什么都不画......最后是一个空的容器。然后,如果您需要清除图形,则删除Points数组的内容并在Panel上调用Invalidate。这将清除持久化数据并重新粉碎。
答案 1 :(得分:2)
您可以使用
Panel1.Invalidate();
但是这有一个问题,在你调用这个函数之后它清除了面板中的所有图形,但它也回想起了这个函数,即
private void panel1_Paint(object sender, PaintEventArgs e)
{
//This function is recalled after Panel1.Invalidate();
}
因此,解决方案是在其他功能中使用油漆代码
private void MyDrawing()
{
Graphics g = Graphics.FromImage(tempDraw);
// if above line doesn't work you can use the following commented line
//Graphics g = Graphics.Panel1.CreateGraphics();
Pen myPen = new Pen(foreColor, lineWidth);
g.DrawLine(myPen, x1, y1, x2, y2);
myPen.Width = 100;
myPen.Dispose();
Panel1.Graphics.DrawImageUnscaled(tempDraw, 0, 0);
g.Dispose();
}
答案 2 :(得分:0)
您必须使用您正在使用的任何基色再次绘制面板,例如。使用Graphics.FillRectangle方法的白色\灰色:
// Create solid brush.
SolidBrush whiteBrush = new SolidBrush(Color.White);
// Create location and size of rectangle.
// Fill rectangle to screen.
e.Graphics.FillRectangle(whiteBrush, panel.Location.X, panel.Location.Y, panel.Width, panel.Height);
this.Invalidate();