Graphics.DrawRectangle (Pen, RectangleF) - PullRequest
       37

Graphics.DrawRectangle (Pen, RectangleF)

9 голосов
/ 20 января 2009

http://msdn.microsoft.com/en-us/library/system.drawing.graphics.drawrectangle.aspx

FillRectangle, DrawRectangle, FillElipse и DrawEllipse могут принимать 4 параметра типа Float (или «Single»): x, y, ширина, высота. DrawRectangle - единственный, который не будет принимать RectangleF, хотя.

Мне было интересно, знает ли кто-нибудь, почему это так. Похоже, они просто забыли его перегрузить.

Ответы [ 4 ]

13 голосов
/ 22 января 2009

Ну, для меня это тоже похоже на упущение.

Интересно, что существует перегрузка DrawRectangles, которая принимает массив RectangleF [] в качестве параметра.

Так что, я полагаю, вы могли бы использовать это с размером массива один, если это необходимо.

1 голос
/ 27 марта 2018

Согласно ответу Энди расширение должно быть таким, как показано ниже

public static class GraphicsExtensions
{
    public static void DrawRectangle(this Graphics g, Pen pen, RectangleF rect)
    {
        g.DrawRectangles(pen, new[] { rect });
    }
}
0 голосов
/ 20 ноября 2018

Я знаю, что этот вопрос старый, но просто для справки: я считаю, что правильный способ - использовать round или усечение , например:

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()
0 голосов
/ 23 августа 2017

Исходя из ответа Энди, этот простой метод расширения облегчает жизнь.

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);
}
...