10

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

FillRectangle、DrawRectangle、FillElipse 和 DrawEllipse 都可以采用 4 个 Float(或“Single”)参数:x、y、宽度、高度。不过,DrawRectangle 是唯一不采用 RectangleF 的。

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

4

4 回答 4

14

好吧,这对我来说确实也像是一个遗漏。

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

所以我想如果需要的话,你可以将它与一个数组大小一起使用。

于 2009-01-21T21:21:31.137 回答
1

根据安迪的回答,扩展名应该如下

public static class GraphicsExtensions
{
    public static void DrawRectangle(this Graphics g, Pen pen, RectangleF rect)
    {
        g.DrawRectangles(pen, new[] { rect });
    }
}
于 2018-03-27T05:17:11.843 回答
0

继安迪的回答之后,这种简单的扩展方法让生活更轻松。

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);
}
于 2017-08-23T07:42:50.453 回答
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()
于 2018-11-20T11:28:13.777 回答