سؤال

http://msdn.microsoft.com/ أون لنا / مكتبة / system.drawing.graphics.drawrectangle.aspx

وFillRectangle، DrawRectangle، FillElipse وDrawEllipse جميعا أن يستغرق 4 تعويم (أو "واحدة") المعلمات: س، ص، العرض والارتفاع. 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);
}

وأعرف أن هذا السؤال هو القديم، ولكن فقط للإشارة: أعتقد أن الطريقة الصحيحة لاستخدام إما <وأ href = "https://docs.microsoft.com/cs-cz/dotnet/api/system. drawing.rectangle.round؟ عرض = netframework-4.7.2 "يختلط =" نوفولو noreferrer "> مستديرة أو <وأ href =" https://docs.microsoft.com/cs-cz/dotnet/api/ system.drawing.rectangle.truncate عرض = netframework-4.7.2 "يختلط =" نوفولو noreferrer "> اقتطاع ، مثل:؟

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