2010-11-05 25 views
5

Tôi có hai điểm được tạo, giống như một dòng. Tôi muốn chuyển đổi nó thành hình chữ nhật. Tôi nên làm như thế nào?Làm thế nào để tạo ra một RectangleF sử dụng hai PointF?

Ví dụ: đây là cách tôi vẽ đường kẻ. Nhưng tôi muốn nó được một Rectangle

private PointF start, end; 
    protected override void OnMouseDown(MouseEventArgs e) 
    { 
     start.X = e.X; 
     start.Y = e.Y; 
    } 

    protected override void OnMouseUp(MouseEventArgs e) 
    { 
     end.X = e.X; 
     end.Y = e.Y; 

     Invalidate(); 
    } 

Trả lời

16

Làm thế nào về:

new RectangleF(Math.Min(start.X, end.X), 
       Math.Min(start.Y, end.Y), 
       Math.Abs(start.X - end.X), 
       Math.Abs(start.Y - end.Y)); 

Về cơ bản điều này làm cho chắc chắn rằng bạn thực sự trình bày các góc trên bên trái là "bắt đầu", ngay cả khi người dùng đã tạo một đường từ góc dưới bên trái đến góc trên cùng bên phải.

+1

cám ơn này giúp :) – Rye

2

Một phiên bản rõ ràng hơn về câu trả lời của Jon sử dụng FromLTRB:

/// <summary> 
    /// Creates a rectangle based on two points. 
    /// </summary> 
    /// <param name="p1">Point 1</param> 
    /// <param name="p2">Point 2</param> 
    /// <returns>Rectangle</returns> 
    public static RectangleF GetRectangle(PointF p1, PointF p2) 
    { 
     float top = Math.Min(p1.Y, p2.Y); 
     float bottom = Math.Max(p1.Y, p2.Y); 
     float left = Math.Min(p1.X, p2.X); 
     float right = Math.Max(p1.X, p2.X); 

     RectangleF rect = RectangleF.FromLTRB(left, top, right, bottom); 

     return rect; 
    } 
Các vấn đề liên quan