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.

¿Fue útil?

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()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top