如何在简单的油漆应用中清除面板

本文关键字:应用 清除 简单 | 更新日期: 2023-09-27 17:56:57

我正在研究一个简单的窗口窗体绘画应用程序。我在清除面板时遇到问题。我用来绘制的代码是

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();
 }

如何清除面板?

如何在简单的油漆应用中清除面板

是否在 Panel 实例的绘制处理程序中绘制?如果没有,那么在面板上调用无效就可以了。

但是您可能会保留绘图项目,因此要清除它们,您需要删除已绘制的内容,然后调用 Invalidate。您也可以使用 FillRect 用特定颜色填充面板,但这将是一个肮脏的解决方法,不适合您的最终设计。

您还应该查看 CodeProject.com 以获取此类示例,以便了解在创建此类绘图应用程序时需要处理的内容。

编辑:

根据编辑的答案,您无法清除具有现有逻辑的面板。您正在窗体的 Paint 处理程序中绘画,这将在需要重新绘制时随时发生。这意味着你应该改变你的方法。您需要在 Paint 处理程序中设置某种条件,以决定它是否会绘制任何内容。这就是绘图对象的持久性的用武之地。如果要创建绘图程序,则必须在面板对象上处理鼠标向下,向上和移动事件,并将数据存储在点数组中。(作为一种绘图类型的示例。然后在 Paint 处理程序中,如果 Points[] 不为空,则绘制点。否则你什么也画不出来...最终进入一个空容器。然后,如果需要清除图形,请删除点数组的内容,并在面板上调用 Invalid。这将清除持久化的数据并重新绘制为空。

您可以使用

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();
 }

您必须使用您使用的任何基色再次在面板上绘制,例如。 白色''灰色与图形.填充矩形方法:

// 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();