C# 单击按钮时清除表单中绘制的形状

C# 单击按钮时清除表单中绘制的形状,c#,C#,我想在单击将清除形状的按钮时清除中窗体上绘制前的形状。所以我在表单中使用代码: private void Form1_Paint(object sender, PaintEventArgs e) { System.Drawing.Graphics g = this.CreateGraphics(); System.Drawing.Pen myPe = new Pen(Color.Blue, 1); Point[] array = { new Point(2

我想在单击将清除形状的按钮时清除中窗体上绘制前的形状。所以我在表单中使用代码:

    private void Form1_Paint(object sender, PaintEventArgs e)
    {
    System.Drawing.Graphics g = this.CreateGraphics();
    System.Drawing.Pen myPe = new Pen(Color.Blue, 1);
    Point[] array = { new Point(220, 70), new Point(200, 120), new Point(230, 120) };
    g.DrawPolygon(myPe ,array);
}
我在
按钮1\u点击
中使用了下面的代码:

private void button1_Click(object sender, EventArgs e) 
{ 
    System.Drawing.Graphics g = this.CreateGraphics();
    g.Clear(this.BackColor);  
}

此代码和此。刷新但不工作。我应该怎么做。

您需要将用于绘制的数据保存在类级变量中

在“清除”按钮中,您可以清除它

现在,它总是在
Paint
事件中创建,因此它总是重新出现

使用
列表
可以让生活更轻松

Paint
事件中,您可以并且应该使用当前的
e.Graphics
对象

List<Point> points = new List<Point>() 

private void buttonSetDrawing_Click(object sender, EventArgs e)
{
    points = new List<Point>() { new Point(220, 70), 
                                new Point(200, 120), new Point(230, 120) };
    Invalidate();
}

private void buttonClear_Click(object sender, EventArgs e)
{
    points.Clear();
    Invalidate();
}

private void Form1_Paint(object sender, PaintEventArgs e)
{
    Graphics g = e.Graphics;
    System.Drawing.Pen myPen = new Pen(Color.Blue, 1);
    if (points.Count > 1) g.DrawPolygon(myPen, points.ToArray() );
}
列表点=新列表()
私有无效按钮绘制\单击(对象发送者,事件参数e)
{
点=新列表(){新点(220,70),
新点(200120),新点(230120)};
使无效();
}
私有无效按钮清除单击(对象发送者,事件参数e)
{
点。清除();
使无效();
}
私有void Form1_Paint(对象发送器、PaintEventArgs e)
{
图形g=e.图形;
System.Drawing.Pen myPen=新笔(颜色:蓝色,1);
如果(points.Count>1)g.DrawPolygon(myPen,points.ToArray());
}

您应该使用
OnPaint
方法进行绘制,而不是使用按钮。您绘制的都是错误的。这可能很好,因为您现在可以通过最小化和最大化形状来清除所有绘制的像素;-)-切勿使用
控件。CreateGraphics
!切勿尝试缓存
图形
对象!使用
Graphics g=Graphics.FromImage(bmp)
或在控件的
Paint
事件中,使用
e.Graphics
参数将bmp绘制到
位图中你的目标是什么:Winforms?WPF?ASP。。。??始终相应地标记您的问题!你能检查一下吗..你需要把你用来绘图的数据保存在一个类级变量中。在“清除”按钮中,您可以清除它。现在它总是在绘制事件中创建的,所以它总是重新出现。它不应该出现。您是否将其类型从“数组”更改为“列表”
??可能不会,否则您将在DrawPolygon调用中遇到错误,该调用需要一个数组。我已经修好了。实际上,也可以将名称更改为
points
pointList
。。我会更新答案。。好名字很重要!!数组是相当差的对象;它们没有
Clear
函数,也没有现代泛型所拥有的大多数其他好方法。它们还必须预先分配到一定的大小。这是非常不实际的。所以你应该考虑使用列表来代替!如果你真的想,你可能需要写
array=newpoint[]{}
而不是
point.Clear();将检查更改为test
array.Length
,然后!但是有了一份清单,你可以做的更多。e、 你可以随时编写
点列表。添加(新点(…);
好多了!