Graphics.DrawRectangle(Pen,RectangleF)

时间:2009-01-20 20:37:37

标签: .net graphics drawing overloading rectangles

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

FillRectangle,DrawRectangle,FillElipse和DrawEllipse都可以采用4个Float(或“Single”)参数:x,y,width,height。但是DrawRectangle是唯一不会使用RectangleF的。

我想知道是否有人知道这是为什么。看起来他们似乎只是忘了超载它。

4 个答案:

答案 0 :(得分:13)

嗯,确实看起来对我来说也是一个遗漏。

有趣的是,DrawRectangles有一个重载,它将RectangleF []数组作为参数。

所以我想如果需要你可以使用数组大小​​为1。

答案 1 :(得分:1)

根据Andy的回答,扩展名应如下所示

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

答案 2 :(得分:0)

根据Andy的回答,这种简单的扩展方法使生活更轻松。

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

答案 3 :(得分:0)

我知道这个问题很旧,但是仅供参考:我相信正确的方法是使用roundtruncate,例如:

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()