C#語言 第四部分 圖形界面編程(四) 尺寸、座標、邊界

這一課很簡單,學習幾個類即可。

1 尺寸:Size類和SizeF類

Size類是一個表示尺寸的值類型類,具有兩個正常屬性:Width和Height,表示寬度和高度;一個靜態屬性:Empty,表示0尺寸常量(Width屬性和Height屬性均爲0)。

SizeF類和Size類似,區別主要是Size類型對象的屬性爲整數值,SizeF類型對象的屬性爲單精度浮點類型。

看一個簡單的例子:

using System;
using System.Drawing;
 
namespace Edu.Study.Graphics.ToolClasses {
    static class Program {
        static void Main(string[] args) {
            // 定義Size類型對象, 寬度200, 高度100
            Size size = new Size(100, 200);
            // 重新設置寬度爲150
10              size.Width = 150;
11              Console.WriteLine(size);
12   
13              // 將size變量表示的對象和一個寬度300, 高度200的Size對象相加
14              size = Size.Add(size, new Size(300, 200));
15              Console.WriteLine(size);
16   
17              // 將size變量表示的對象和一個寬度50, 高度20的Size對象相減
18              size = Size.Subtract(size, new Size(50, 20));
19              Console.WriteLine(size);
20   
21   
22              // 定義SizeF類型對象
23              SizeF sizeF = new SizeF(200.123F, 100.321F);
24              Console.WriteLine(sizeF);
25   
26              // 將sizeF變量表示的對象和一個寬度50, 高度50的SizeF對象相加
27              sizeF = SizeF.Add(sizeF, new SizeF(50, 50));
28              Console.WriteLine(sizeF);
29   
30              // 將sizeF變量表示的對象和一個寬度50, 高度50的SizeF對象相減
31              sizeF = SizeF.Subtract(sizeF, new SizeF(50, 50));
32              Console.WriteLine(sizeF);
33   
34              // 將SizeF類型對象轉換爲Size類型對象
35              // 得到的Size對象高度寬度屬性不小於原始SizeF對象的高度寬度屬性
36              Console.WriteLine(Size.Ceiling(sizeF));
37              // 將SizeF類型對象轉換爲Size類型對象
38              //得到的Size對象高度寬度屬性爲原始SizeF對象高度寬度屬性四捨六入五成雙的結果
39              Console.WriteLine(Size.Round(sizeF));
40              // 將SizeF類型對象轉換爲Size類型對象, 
41              // 得到的Size對象高度寬度屬性爲原始SizeF對象高度寬度屬性截掉小數部分的結果
42              Console.WriteLine(Size.Truncate(sizeF));
43   
44              // 將Size.Empty賦值給size變量
45              size = Size.Empty;
46              Console.WriteLine(size);
47          }
48      }
49  }

很簡單的代碼,對照註釋就應該可以理解,無需過多講解。

2 座標:Point和PointF類

座標由Point和PointF類表示(整型屬性和浮點數屬性),是一個表示點的座標的值類型類,具有X, Y兩個屬性,表示座標系上的一個點。

注意:.net Framework設定屏幕右上角的點爲(0, 0)座標,並且y軸向下爲正,x軸向右爲正

其餘和前面的完全類似,參考即可,看範例:

using System;
using System.Drawing;
 
namespace Edu.Study.Graphics.ToolClasses {
    static class Program {
        static void Main(string[] args) {
 
            // 定義Point類型對象, 寬度200, 高度100
            Point point = new Point(100, 200);
10              // 重新設置寬度爲150
11              point.X = 150;
12              Console.WriteLine(point);
13   
14              // 將point變量表示的對象和一個寬度300, 高度200的Size對象相加
15              point = Point.Add(point, new Size(300, 200));
16              Console.WriteLine(point);
17   
18              // 將point變量表示的對象和一個寬度50, 高度20的Size對象相減
19              point = Point.Subtract(point, new Size(50, 20));
20              Console.WriteLine(point);
21   
22   
23              // 定義PointF類型對象
24              PointF pointF = new PointF(200.123F, 100.321F);
25              Console.WriteLine(pointF);
26   
27              // 將pointF變量表示的對象和一個寬度50, 高度50的SizeF對象相加
28              pointF = PointF.Add(pointF, new SizeF(50, 50));
29              Console.WriteLine(pointF);
30   
31              // 將pointF變量表示的對象和一個寬度50, 高度50的SIzeF對象相減
32              pointF = PointF.Subtract(pointF, new SizeF(50, 50));
33              Console.WriteLine(pointF);
34   
35              // 將PointF類型對象轉換爲Point類型對象
36              // 得到的Point對象高度寬度屬性不小於原始PointF對象的高度寬度屬性
37              Console.WriteLine(Point.Ceiling(pointF));
38              // 將PointF類型對象轉換爲Point類型對象
39              //得到的Point對象高度寬度屬性爲原始PointF對象高度寬度屬性四捨六入五成雙的結果
40              Console.WriteLine(Point.Round(pointF));
41              // 將PointF類型對象轉換爲Point類型對象, 
42              // 得到的Point對象高度寬度屬性爲原始PointF對象高度寬度屬性截掉小數部分的結果
43              Console.WriteLine(Point.Truncate(pointF));
44   
45              // 將Point.Empty賦值給point變量
46              point = Point.Empty;
47              Console.WriteLine(point);
48          }
49      }
50  }

注意:Point.Add和Point.Subtract方法的第二個參數是一個Size類型對象,PointF類以此類推。

3 邊界:Rectangle和RectangleF類

邊界是一個矩形,由Rectangle類和RectangleF類定義,依舊是值類型對象,具有一個表示左邊界的Left屬性,一個表示上邊界的Top屬性,一個表示寬度Width屬性和一個表示高度Height屬性組成。Rectangle類的屬性爲整數類型,RectangleF類的屬性爲單精度浮點類型。

邊界不僅定義了座標,還定義了尺寸。座標爲該矩形右上角點的左邊,尺寸爲矩形的大小。使用起來也很簡單,看代碼範例即可:

using System;
using System.Drawing;
 
namespace Edu.Study.Graphics.ToolClasses {
    static class Program {
        static void Main(string[] args) {
            // 實例化一個左上角座標爲X=10, Y=10, 寬度100, 高度200的矩形
            Rectangle rect = new Rectangle(10, 10, 100, 200);
            Console.WriteLine(rect);
10              // 輸出矩形的右下角座標
11              Console.WriteLine(rect.Right + ", " + rect.Bottom);
12   
13              // 將矩形的左上角X座標向正方向移動2個單位
14              rect.X += 20;
15              Console.WriteLine(rect);
16   
17              // 獲取矩形左上角座標, 返回一個Point類型對象
18              Console.WriteLine(rect.Location);
19             
20              // 將矩形的邊長各放大4個單位和6個單位
21              // 左上角X座標向負方向移動2, Y座標向負方向移動3
22              // 右下角X座標向正方向移動2, Y座標向正方向移動3
23              // Rectangle類具備一個普通方法和一個靜態方法, 功能相同
24              Console.WriteLine(Rectangle.Inflate(rect, 2, 3));    // 使用類的靜態方法
25              rect.Inflate(2, 3);        // 使用普通方法
26              Console.WriteLine(rect);
27   
28              // 獲取矩形{X=30,Y=10,Width=100,Height=200}與
29              // 矩形{X=60,Y=90,Width=300,Height=500}的交集矩形
30              // Rectangle類具備一個普通方法和一個靜態方法, 功能相同
31              Console.WriteLine(
32                  Rectangle.Intersect(rect, new Rectangle(60, 90, 300, 500))); // 使用類的靜態方法
33              rect.Intersect(new Rectangle(60, 90, 300, 500));    // 使用普通方法
34              Console.WriteLine(rect);
35             
36              // 判斷兩個矩形是否相交
37              Console.WriteLine(rect.IntersectsWith(new Rectangle(100, 90, 70, 200)));
38             
39              // 移動矩形, X座標向正方向移動50單位, Y座標向正方向移動100單位
40              rect.Offset(50, 100);
41              Console.WriteLine(rect);
42   
43   
44              // 下面的代碼演示RectangleF類, 情況和Rectangle完全類似,
45              // 請參照Rectangle的代碼理解
46              RectangleF rectF = new RectangleF(10.1F, 10.2F, 100.123F, 200.456F);
47              Console.WriteLine(rectF);
48              Console.WriteLine(rectF.Right + ", " + rectF.Bottom);
49   
50              rectF.X += 20;
51              Console.WriteLine(rectF);
52   
53              Console.WriteLine(rectF.Location);
54   
55              Console.WriteLine(RectangleF.Inflate(rectF, 2.1F, 3.2F));
56              rectF.Inflate(2.1F, 3.2F);
57              Console.WriteLine(rectF);
58   
59              Console.WriteLine(RectangleF.Intersect(rectF, new RectangleF(60, 90, 300, 500)));
60              rectF.Intersect(new RectangleF(60, 90, 300, 500));
61              Console.WriteLine(rectF);
62   
63              Console.WriteLine(rectF.IntersectsWith(new RectangleF(100, 90, 70, 200)));
64   
65              rectF.Offset(50.99F, 100.01F);
66              Console.WriteLine(rectF);
67   
68              // RectangleF類對象轉化爲Rectangle類對象(四捨六入五成雙)
69              rect = Rectangle.Round(rectF);
70              Console.WriteLine(rect);
71   
72              // RectangleF類對象轉化爲Rectangle類對象(取不小於整數)
73              rect = Rectangle.Ceiling(rectF);
74              Console.WriteLine(rect);
75   
76              // RectangleF類對象轉化爲Rectangle類對象(小數部分截斷)
77              rect = Rectangle.Truncate(rectF);
78              Console.WriteLine(rect);
79   
80              // 取Empty靜態量
81              rect = Rectangle.Empty;
82              Console.WriteLine(rect);
83   
84              // 用左上角座標和右下角座標初始化矩形
85              rect = Rectangle.FromLTRB(10, 20, 50, 90);
86              Console.WriteLine(rect);
87          }
88      }
89  }

注意,Rectangle類和RectangleF類中具有幾個方法,既有普通方法形式,也有靜態方法形式。普通方法會改變當前對象的屬性,靜態方法則返回一個新的矩形對象,不會改變原有矩形對象的屬性。

最後在重申一次,這些類都是值類型類,注意其對象在比較和賦值時候與引用類型對象的區別

本章代碼下載

發佈了51 篇原創文章 · 獲贊 7 · 訪問量 40萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章