Вопрос

http://msdn.microsoft.com/ ан-нас / библиотека / system.drawing.graphics.drawrectangle.aspx

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

public static class GraphicsExtensions
{
    public static void DrawRectangle(this Graphics g, Pen pen, RectangleF rect)
    {
        g.DrawRectangles(pen, new[] { rect });
    }
}

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

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

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

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()
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top