Как удалить нарисованный круг в C# windows form?

Я нарисовал круг в windows form

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

Как удалить его...

8 ответов


вы можете аннулировать область рисования, которую хотите обновить, например:

 this.Invalidate();

на форме...


вы должны очистить свою графику:

Graphics.Clear();

но все нарисованные фигуры будут очищены. Просто вам нужно будет перерисовать все фигуры, кроме этого круга.

кроме того, вы можете использовать метод invalidate:

Control.Invalidate()

Это обозначает область перерисовку внутри вашего графика. Но если у вас есть пересекающиеся фигуры, вам придется перерисовать фигуры, которые вы хотите видеть внутри области, кроме круга.

Это может стать грязным, вы можете хотите проверить, как проектировать график контроля или использовать любой графической разметки библиотека.


предполагая, что вы подписываетесь на событие Paint или переопределяете защищенную процедуру OnPaint, вам нужно будет выполнить что-то вроде этого:

bool paint = false;

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

затем, когда вы хотите прекратить рисовать круг:

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

вы не" удаляете " его как таковой, нечего удалять. Это рисунок, вы рисуете что-то еще над ним или вы можете вызвать Graphics.Clear() метод.


вы можете сделать фигуру тех же размеров, используя backColor вашего элемента управления, в котором вы рисуете

используйте после кода, чтобы очистить фигуру.

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

Если u использует Invalidate() и не работает, сделать panel.Refresh().

это будет работать на вас.


на самом деле, ты can удалить свой круг и только круг.

все, что вам нужно, это что-то вроде скриншота "до состояния" область, которую вы хотите очистить, сделать TextureBrush от него. Вы можете достичь этого шага чем-то вроде этого:

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

первая строка даст вам растровое изображение в размере windows forms. Вторая строка сохранит скриншот этого в _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));

очень просто удалить нарисованный круг из c.

есть только четыре действия:-

  1. открыть turbo app
  2. перейти к команде, где вы нарисовали круг
  3. перетащите команду
  4. нажмите на кнопку Удалить