Dibujar rectángulos con esquinas redondeadas

07/09/2008 - 23:44 por Alberto | Informe spam
Un saludo a todos. Quisiera plantear la siguiente pregunta,
Estoy trabajando con VS 2008 en un WinForm.
Debo dibujar rectángulos con las esquinas redondeadas (el mismo shape que
los 'GroupBox')
He estado investigando en la clase System.Drawing.Graphics pero no lo
consigo. Me podéis orientar por favor? Hasta ahora dibujo los rectángulos
del siguiente modo:

{
System.Drawing.Graphics areaToPaint = this.CreateGraphics();
System.Drawing.Pen myPenRectangle = new System.Drawing.Pen(
System.Drawing.Color.Blue );
areaToPaint.DrawRectangle( myPenRectangle, 250, 50, 325, 100 );
}

Es posible dibujar las esquinas redondeadas partiendo de lo que tengo o debo
usar una clase diferente?

Aprecio vuestra ayuda, y os doy las gracias de antemano,

Alberto

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
08/09/2008 - 08:15 | Informe spam
"Alberto" wrote in message
news:%
Un saludo a todos. Quisiera plantear la siguiente pregunta,
Estoy trabajando con VS 2008 en un WinForm.
Debo dibujar rectángulos con las esquinas redondeadas (el mismo shape que
los 'GroupBox')
He estado investigando en la clase System.Drawing.Graphics pero no lo
consigo. Me podéis orientar por favor? Hasta ahora dibujo los rectángulos
del siguiente modo:

{
System.Drawing.Graphics areaToPaint = this.CreateGraphics();
System.Drawing.Pen myPenRectangle = new System.Drawing.Pen(
System.Drawing.Color.Blue );
areaToPaint.DrawRectangle( myPenRectangle, 250, 50, 325, 100 );
}

Es posible dibujar las esquinas redondeadas partiendo de lo que tengo o
debo usar una clase diferente?

Aprecio vuestra ayuda, y os doy las gracias de antemano,



Creo que no hay un método que lo haga automáticamente. Tedrías que hacer
una subrutina que pinte los cuatro bordes líneas usando DrawLine y las
cuatro esquinas con DrawArc.
Respuesta Responder a este mensaje
#2 Alberto
08/09/2008 - 21:25 | Informe spam
"Alberto Poblacion" wrote
in message news:
"Alberto" wrote in message
news:%
Un saludo a todos. Quisiera plantear la siguiente pregunta,
Estoy trabajando con VS 2008 en un WinForm.
Debo dibujar rectángulos con las esquinas redondeadas (el mismo shape que
los 'GroupBox')
He estado investigando en la clase System.Drawing.Graphics pero no lo
consigo. Me podéis orientar por favor? Hasta ahora dibujo los rectángulos
del siguiente modo:

{
System.Drawing.Graphics areaToPaint = this.CreateGraphics();
System.Drawing.Pen myPenRectangle = new System.Drawing.Pen(
System.Drawing.Color.Blue );
areaToPaint.DrawRectangle( myPenRectangle, 250, 50, 325, 100 );
}

Es posible dibujar las esquinas redondeadas partiendo de lo que tengo o
debo usar una clase diferente?

Aprecio vuestra ayuda, y os doy las gracias de antemano,



Creo que no hay un método que lo haga automáticamente. Tedrías que hacer
una subrutina que pinte los cuatro bordes líneas usando DrawLine y las
cuatro esquinas con DrawArc.



Hola Alberto, muchas gracias por responder.

Que lástima que no se pueda hacer con 'DrawRectangle' :-(

Sabia lo de hacerlo con 'DrawLine', pero se tiene que pintar cada línea por
separado y cuando es necesario pintar varios rectángulos, el código crece
mucho.

Por favor me podrías aconsejar sobre si es viable la idea de crear una clase
(usando DrawLine y DrawArc) y crear un objeto de la misma por cada
rectángulo que quiero pintar?

Recibe un atento saludo y las gracias,

Alberto
Respuesta Responder a este mensaje
#3 Alberto Poblacion
09/09/2008 - 10:00 | Informe spam
"Alberto" wrote in message
news:uA$
Por favor me podrías aconsejar sobre si es viable la idea de crear una
clase (usando DrawLine y DrawArc) y crear un objeto de la misma por cada
rectángulo que quiero pintar?




¿Por qué crear una clase y objetos de la misma? Basta con crear un método
estático, y usarlo igual que el DrawRectangle. Es más, si estás usando C#
3.0, puedes incluso hacer un método de extensión de la clase Graphics, y
usarlo con toda naturalidad igual que el DrawRectangle original, por
ejemplo: e.Graphics.DrawRectangleRedondeado(...);. Símplemente tendrías que
hacer algo parecido a esto (lo escribo sobre la marcha, no lo he probado):

public static class ExtensionesGraficas
{
public static void DrawRectangleRedondeado(this Graphics g, Pen pen,
Rectangle rect, int radio)
{
g.DrawLine(pen, rect.Left+radio, rect.Top, rect.Right-radio,
rect.Top);
//Etc. (repetir cuatro bordes y hacer cuatro esquinas)
}
}
Respuesta Responder a este mensaje
#4 Alberto
09/09/2008 - 12:16 | Informe spam
"Alberto Poblacion" wrote
in message news:
"Alberto" wrote in message
news:uA$
Por favor me podrías aconsejar sobre si es viable la idea de crear una
clase (usando DrawLine y DrawArc) y crear un objeto de la misma por cada
rectángulo que quiero pintar?




¿Por qué crear una clase y objetos de la misma? Basta con crear un
método estático, y usarlo igual que el DrawRectangle. Es más, si estás
usando C# 3.0, puedes incluso hacer un método de extensión de la clase
Graphics, y usarlo con toda naturalidad igual que el DrawRectangle
original, por ejemplo: e.Graphics.DrawRectangleRedondeado(...);.
Símplemente tendrías que hacer algo parecido a esto (lo escribo sobre la
marcha, no lo he probado):

public static class ExtensionesGraficas
{
public static void DrawRectangleRedondeado(this Graphics g, Pen pen,
Rectangle rect, int radio)
{
g.DrawLine(pen, rect.Left+radio, rect.Top, rect.Right-radio,
rect.Top);
//Etc. (repetir cuatro bordes y hacer cuatro esquinas)
}
}




Hola de nuevo Alberto,
He visto tus comentarios y el ejemplo que me has puesto. Muchas gracias por
tu ayuda desinteresada. En cuanto termine con el martillo y el serrucho (soy
carpintero), me pondre a disfrutar de mi hobby favorito (programacion), asi
que esta noche intentare aplicar tus sugerencias (vamos a ver si lo
consigo).
Muchas gracias de nuevo :-)
Un saludo desde Poole (England) Alberto.
Respuesta Responder a este mensaje
#5 Alberto
14/09/2008 - 19:19 | Informe spam
"Alberto Poblacion" wrote
in message news:
"Alberto" wrote in message
news:uA$
Por favor me podrías aconsejar sobre si es viable la idea de crear una
clase (usando DrawLine y DrawArc) y crear un objeto de la misma por cada
rectángulo que quiero pintar?




¿Por qué crear una clase y objetos de la misma? Basta con crear un
método estático, y usarlo igual que el DrawRectangle. Es más, si estás
usando C# 3.0, puedes incluso hacer un método de extensión de la clase
Graphics, y usarlo con toda naturalidad igual que el DrawRectangle
original, por ejemplo: e.Graphics.DrawRectangleRedondeado(...);.
Símplemente tendrías que hacer algo parecido a esto (lo escribo sobre la
marcha, no lo he probado):

public static class ExtensionesGraficas
{
public static void DrawRectangleRedondeado(this Graphics g, Pen pen,
Rectangle rect, int radio)
{
g.DrawLine(pen, rect.Left+radio, rect.Top, rect.Right-radio,
rect.Top);
//Etc. (repetir cuatro bordes y hacer cuatro esquinas)
}
}




Hola de nuevo Alberto,

No sé si vuelves por este hilo y ves esta nueva entrada, pero en cualquier
caso lo voy a intentar.

Por fin hoy me he puesto a aplicar tus sugerencias (me ha tomado mas de
varios días disfrutar de mi hobby).

El caso es que estoy estancado con las esquinas del rectángulo, consigo
dibujar los arcos, pero es obvio que tengo que pasarle las coordenadas
tomadas de las variables del rectángulo y me estoy haciendo un lio; me
puedes echar una mano por favor.

ESTO ES LO QUE TENGO:
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)
}
Aprovecho para saludar y agradecer cualquier ayuda,
Alberto
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida