CLR: .Net / Mono / Boo / Otros CLR > C#

 Rectangulo con esquinas redondas

(1/1)

lUis_mIguel:
Saludos al foro!
Estoy programando (aficionado) en c# con VS2008 en un winform.
Quisiera pedir vuestra ayuda, pues estoy atascado en lo siguiente:
He creado una clase que dibuja cuatro líneas que no se tocan en las esquinas, así formo un rectángulo (SIN ESQUINAS); ahora quiero dibujar cuatro arcos una en cada esquina, pero no me aclaro con esto último, ¿podríais echarme una manita por favor?
ESTO ES LO QUE TENGO HECHO:
protected override void OnPaint( PaintEventArgs e )
      {
         System.Drawing.Graphics areaToPaint = this.CreateGraphics();
         System.Drawing.Pen myPen = new System.Drawing.Pen( System.Drawing.Color.MediumSlateBlue );
         System.Drawing.Rectangle myRect = new System.Drawing.Rectangle( 50, 50, 500, 100 );
         ExtensionesGraficas.RectRoundCorner( areaToPaint, myPen, myRect, 8 );
      }
public static void RectRoundCorner( this Graphics g, Pen pen, Rectangle rect, int radio )
      {
         g.DrawLine( pen, rect.Left + radio, rect.Top, rect.Right - radio, rect.Top );
         g.DrawLine( pen, rect.Left + radio, rect.Bottom, rect.Right - radio, rect.Bottom );
         g.DrawLine( pen, rect.Left, rect.Top + radio, rect.Left, rect.Bottom - radio );
         g.DrawLine( pen, rect.Right, rect.Top + radio, rect.Right, rect.Bottom - radio );
         //(aquí tengo que dibujar las cuatro esquinas)
      }
Espero haberme expresado con claridad y se entienda el código. Si me podéis orientar os lo agradezco de antemano,
LMiguel
------------
Como podéis ver en el adjunto ya lo he conseguido. Solo se requería pasar a Draw.Arc las coordenadas del vértice, y la anchura y altura, del cuadrado imaginario en cuyo interior se dibuja la circunferencia de la cual estamos pintando un arco.

FernandaUY:
Yo utilizo el siguiente método


--- Código: C# --- public void Redondeado()      {         GraphicsPath gp = new GraphicsPath();         //SolidBrush oSolidBrush = new SolidBrush(_ColorRelleno);         Brush oSolidBrush = new LinearGradientBrush(new Rectangle(_Izquierda, _Arriba, _Ancho, _Altura), _ColorRelleno, Color.White, 45, false);         Pen oPen = new Pen(_ColorBorde, _AnchoBorde);           gp.AddLine(_Izquierda + _Radio, _Arriba, _Izquierda + _Ancho - (_Radio * 2), _Arriba); // Line         gp.AddArc(_Izquierda + _Ancho - (_Radio * 2), _Arriba, _Radio * 2, _Radio * 2, 270, 90); // Corner         gp.AddLine(_Izquierda + _Ancho, _Arriba + _Radio, _Izquierda + _Ancho, _Arriba + _Altura - (_Radio * 2)); // Line         gp.AddArc(_Izquierda + _Ancho - (_Radio * 2), _Arriba + _Altura - (_Radio * 2), _Radio * 2, _Radio * 2, 0, 90); // Corner         gp.AddLine(_Izquierda + _Ancho - (_Radio * 2), _Arriba + _Altura, _Izquierda + _Radio, _Arriba + _Altura); // Line         gp.AddArc(_Izquierda, _Arriba + _Altura - (_Radio * 2), _Radio * 2, _Radio * 2, 90, 90); // Corner         gp.AddLine(_Izquierda, _Arriba + _Altura - (_Radio * 2), _Izquierda, _Arriba + _Radio); // Line         gp.AddArc(_Izquierda, _Arriba, _Radio * 2, _Radio * 2, 180, 90); // Corner         gp.CloseFigure();          _Area.FillPath(oSolidBrush, gp);         _Area.DrawPath(oPen, gp);         gp.Dispose();      } 

Navegación

[0] Índice de Mensajes

Ir a la versión completa