Graphics.DrawRectangle (Pen, RectangleF)
-
19-08-2019 - |
Pregunta
http://msdn.microsoft.com/ es-es / library / system.drawing.graphics.drawrectangle.aspx
FillRectangle, DrawRectangle, FillElipse y DrawEllipse pueden tomar 4 parámetros Float (o '' Single ''): x, y, ancho, alto. Sin embargo, DrawRectangle es el único que no tomará un RectangleF.
Me preguntaba si alguien sabía por qué es esto. Parece que simplemente olvidaron sobrecargarlo.
Solución
Bueno, seguro que a mí también me parece una omisión.
Curiosamente, hay una sobrecarga de DrawRectangles que toma una matriz RectangleF [] como parámetro.
Así que supongo que podría usar esto con un tamaño de matriz de uno si es necesario.
Otros consejos
Según la respuesta de Andy, la extensión debería ser la siguiente
public static class GraphicsExtensions
{
public static void DrawRectangle(this Graphics g, Pen pen, RectangleF rect)
{
g.DrawRectangles(pen, new[] { rect });
}
}
Siguiendo la respuesta de Andy, este sencillo método de extensión hace la vida más fácil.
using System.Drawing;
public static class GraphicsExtensions
{
public static void DrawRectangle(this Graphics g, Pen pen, RectangleF rect) =>
g.DrawRectangle(pen, rect.X, rect.Y, rect.Width, rect.Height);
}
Sé que esta pregunta es antigua, pero solo como referencia: creo que la forma correcta es usar round o truncate , como:
Dim BBox As RectangleF = ListOfRectangleF(3) ' get RectangleF any way you have it
Dim p As New Pen(Brushes.DarkRed)
e.Graphics.DrawRectangle(p, Rectangle.Round(ptBBox)) ' draw RectangleF using Rectangle.Round()