如何删除c#windows窗体中的绘制圆?

时间:2010-11-08 14:13:43

标签: c# graphics

我在Windows窗体中绘制了一个圆圈

Pen pen = new Pen(Color.Black, 3);
Graphics gr = this.CreateGraphics();
gr.DrawEllipse(pen, 5,5,20,20);

如何删除它......

9 个答案:

答案 0 :(得分:18)

你必须清除你的图形:

Graphics.Clear();

但所有绘制的数字都将被清除。简单地说,您需要重新绘制除圆圈之外的所有数字。

此外,您可以使用Invalidate方法:

Control.Invalidate()

它表示要在Graphics中重绘的区域。但是如果你有交叉的数字,你将不得不重绘你想要在除圆圈之外的区域内可见的数字。

这可能会变得混乱,您可能想看看如何设计control graph或使用任何图表布局library

答案 1 :(得分:12)

您可以使要刷新的绘图区域无效,例如:

 this.Invalidate();

在表格上......

答案 2 :(得分:6)

假设您正在订阅Paint事件或覆盖受保护的OnPaint例程,那么您将需要执行以下操作:

bool paint = false;

protected override void OnPaint(object sender, PaintEventArgs e)
{
  if (paint) 
  {
   // Draw circle.
  }
}

然后当你想停止画一个圆圈时:

paint = false;
this.Invalidate(); // Forces a redraw

答案 3 :(得分:3)

你本身并没有“删除”它,没有什么可以删除的。这是一张图,你在上面画了一些东西,或者你可以拨打Graphics.Clear() method

答案 4 :(得分:3)

您可以使用您正在绘制的控件的backColor制作相同尺寸的图形

在您的代码之后使用以清除您的数字。

Pen p = new Pen(this.BackColor);   
gr.DrawEllipse(p, 5,5,20,20);

答案 5 :(得分:3)

如果您使用的是Invalidate()且无效,请创建panel.Refresh()

这对你有用。

答案 6 :(得分:1)

事实上,你可以删除你的圈子,除了你的圈子。

您需要的所有内容都类似于您想要清除的区域的“之前状态”的屏幕截图,从中创建TextureBrush。您可以通过以下方式实现该步骤:

Bitmap _Background = new Bitmap(this.Width, this.Height);
Graphics.FromImage(_Background).CopyFromScreen(this.Left, this.Top, 0, 0, this.Size);

第一行将为您提供Windows窗体大小的位图。第二行将在_Background - 位图中保存它的屏幕截图。

现在你用它创建一个TextureBrush

Brush brsBackground = new TextureBrush(_Background);

您需要的下一件事是圆的尺寸,因此如果它们不是固定值,您应该将它们保存到变量中。当你拿到它们时,你可以清除这样的特定区域:

Graphics gr = this.CreateGraphics();
gr.FillEllipse(brsBackground, 5, 5, 20, 20); // values referred to your example

完成!

即使复杂的数字也可以被删除,例如GraphicsPath

GraphicsPath gp = new GraphicsPath(); // any kind of GraphicsPath
gr.FillRegion(brsBackground, new Region(gp));

答案 7 :(得分:0)

仅用所需的属性等制作另一个控件,将可见性设置为false,然后将控件的区域设置为另一个控件,如下所示:

pen.Region = pen2.Region;

答案 8 :(得分:-7)

从c中删除绘制的圆圈非常简单。

只有四个步骤: -

  1. 打开turbo app
  2. 转到您绘制圆圈的命令
  3. 拖动命令
  4. 点击删除按钮