Este método llena un rectángulo redondeado en un objeto gráfico (código VB):
Public Sub FillRoundedRectangle(ByVal g As Drawing.Graphics, ByVal r As Rectangle, ByVal d As Integer, ByVal b As Brush)
Dim mode As Drawing2D.SmoothingMode = g.SmoothingMode
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighSpeed
g.FillPie(b, r.X, r.Y, d, d, 180, 90)
g.FillPie(b, r.X + r.Width - d, r.Y, d, d, 270, 90)
g.FillPie(b, r.X, r.Y + r.Height - d, d, d, 90, 90)
g.FillPie(b, r.X + r.Width - d, r.Y + r.Height - d, d, d, 0, 90)
g.FillRectangle(b, CInt(r.X + d/2), r.Y, r.Width - d, CInt(d/2))
g.FillRectangle(b, r.X, CInt(r.Y + d/2), r.Width, CInt(r.Height - d))
g.FillRectangle(b, CInt(r.X + d/2), CInt(r.Y + r.Height - d/2), CInt(r.Width - d), CInt(d/2))
g.SmoothingMode = mode
End Sub
llamar a esta función, controlar el evento de pintura de la PictureBox y pasar el e.Graphics objeto como el primer argumento, y los límites del cuadro de imagen como el segundo argumento si desea que el rectángulo complete su cuadro de imagen por completo.
El parámetro d cambia el ángulo de las esquinas, lo llamo con un valor de 30, se puede probar diferentes valores ...
Además, aquí hay un código para dibujar (en lugar de relleno) un rectángulo redondeado:
Public Sub DrawRoundedRectangle(ByVal g As Drawing.Graphics, ByVal r As Rectangle, ByVal d As Integer, ByVal p As Pen)
g.DrawArc(p, r.X, r.Y, d, d, 180, 90)
g.DrawLine(p, CInt(r.X + d/2), r.Y, CInt(r.X + r.Width - d/2), r.Y)
g.DrawArc(p, r.X + r.Width - d, r.Y, d, d, 270, 90)
g.DrawLine(p, r.X, CInt(r.Y + d/2), r.X, CInt(r.Y + r.Height - d/2))
g.DrawLine(p, CInt(r.X + r.Width), CInt(r.Y + d/2), CInt(r.X + r.Width), CInt(r.Y + r.Height - d/2))
g.DrawLine(p, CInt(r.X + d/2), CInt(r.Y + r.Height), CInt(r.X + r.Width - d/2), CInt(r.Y + r.Height))
g.DrawArc(p, r.X, r.Y + r.Height - d, d, d, 90, 90)
g.DrawArc(p, r.X + r.Width - d, r.Y + r.Height - d, d, d, 0, 90)
End Sub
bueno Meta -Knight ¡muchas gracias por tu rayo de luz! : D El código está funcionando muy bien. Solo otra pregunta, ¿cómo puedo hacer si no quiero pintarlo inmediatamente pero solo cuando la aplicación se encuentra en cierto estado? ¿Debo usar también en este caso el evento Paint? – Drake
Puede tener un valor booleano en su clase (digamos que se llama mustPaint) que establece cuando desea que se pinte el rectángulo, entonces puede agregar una condición en el evento Paint: if mustPaint then [pintar el rectángulo redondeado aquí] end si –
está bien, lo intentaré, gracias – Drake