Graphics.DrawRectangle (Pen, RectangleF)
-
19-08-2019 - |
Вопрос
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()