Desenhar círculos com System.Drawing

Eu tenho esse código que desenha um retângulo (estou tentando refazer o MS Paint)

case "Rectangle": if (tempDraw != null) { tempDraw = (Bitmap)snapshot.Clone(); Graphics g = Graphics.FromImage(tempDraw); Pen myPen = new Pen(foreColor, lineWidth); g.DrawRectangle(myPen, x1, y1, x2-x1, y2-y1); myPen.Dispose(); e.Graphics.DrawImageUnscaled(tempDraw, 0, 0); g.Dispose(); } 

Mas e se eu quiser desenhar um círculo, o que vai mudar?

 g.DrawRectangle(myPen, x1, y1, x2-x1, y2-y1); 

    Tente o método DrawEllipse em seu lugar.

    Não há método DrawCircle ; use DrawEllipse vez disso. Eu tenho uma class estática com methods de extensão de charts (entre outros não mostrados aqui) que desenham e preenchem círculos. Eles são wrappers ao redor de DrawEllipse e FillEllipse :

     public static class GraphicsExtensions { public static void DrawCircle(this Graphics g, Pen pen, float centerX, float centerY, float radius) { g.DrawEllipse(pen, centerX - radius, centerY - radius, radius + radius, radius + radius); } public static void FillCircle(this Graphics g, Brush brush, float centerX, float centerY, float radius) { g.FillEllipse(brush, centerX - radius, centerY - radius, radius + radius, radius + radius); } } 

    Você pode chamá-los assim:

     g.FillCircle(myBrush, center X, centerY, radius); g.DrawCircle(myPen, centerX, centerY, radius); 

    Você precisará usar DrawEllipse se quiser desenhar um círculo usando o GDI +.

    Um exemplo está aqui: http://www.websupergoo.com/helpig6net/source/3-examples/9-drawgdi.htm

    Você deve usar o DrawEllipse :

     // // Summary: // Draws an ellipse defined by a bounding rectangle specified by coordinates // for the upper-left corner of the rectangle, a height, and a width. // // Parameters: // pen: // System.Drawing.Pen that determines the color, width, // and style of the ellipse. // // x: // The x-coordinate of the upper-left corner of the bounding rectangle that // defines the ellipse. // // y: // The y-coordinate of the upper-left corner of the bounding rectangle that // defines the ellipse. // // width: // Width of the bounding rectangle that defines the ellipse. // // height: // Height of the bounding rectangle that defines the ellipse. // // Exceptions: // System.ArgumentNullException: // pen is null. public void DrawEllipse(Pen pen, int x, int y, int width, int height); 

    Se você quiser desenhar um círculo no botão, este código pode estar cheio. senão se você quiser desenhar um círculo em outro controle apenas mude o nome do controle e também do evento. como aqui o botão de evento é chamado. Se você quiser desenhar este círculo na checkbox de grupo, chame o evento Groupbox. Saudações

      public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { this.button1.Location = new Point(108, 12); // this.Paint += new PaintEventHandler(Form1_Paint); this.button1.Paint += new PaintEventHandler(button1_Paint); } void button1_Paint(object sender, PaintEventArgs e) { Graphics g = this.button1.CreateGraphics(); Pen pen = new Pen(Color.Red); g.DrawEllipse(pen, 10, 10, 20, 20); } } 

    Com este código você pode facilmente desenhar um círculo … C # é ótimo e fácil meu amigo

     public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Graphics myGraphics = base.CreateGraphics(); Pen myPen = new Pen(Color.Red); SolidBrush mySolidBrush = new SolidBrush(Color.Red); myGraphics.DrawEllipse(myPen, 50, 50, 150, 150); } } 
      private void DrawEllipseRectangle(PaintEventArgs e) { Pen p = new Pen(Color.Black, 3); Rectangle r = new Rectangle(100, 100, 100, 100); e.Graphics.DrawEllipse(p, r); } private void Form1_Paint(object sender, PaintEventArgs e) { DrawEllipseRectangle(e); }