2016-04-08 96 views
0

我有這樣Rectangle Rect = new Rectangle(0, 0, 300, 200); 一個矩形,我想在20個矩形5X4(5列,4行)這樣分而繪製多個矩形

|'''|'''|'''|'''|'''| 
|...|...|...|...|...| 
|'''|'''|'''|'''|'''| 
|...|...|...|...|...| 
|'''|'''|'''|'''|'''| 
|...|...|...|...|...| 
|'''|'''|'''|'''|'''| 
|...|...|...|...|...| 

道道有人幫equaly劃分呢?香港專業教育學院一直在努力解決這個問題像一小時:(

+0

不,的WinForms – Adrao

+0

你到底想達到什麼目的? –

+0

我只想繪製20個更小的矩形,在另一個矩形內,就是這樣。林創建一個自定義控件,我不能使用DataGridView – Adrao

回答

1

這應有助於:

鑑於你矩形:

Rectangle Rect = new Rectangle(0, 0, 300, 200); 

這將讓subrectangles的列表:

List<RectangleF> GetSubRectangles(Rectangle rect, int cols, int rows) 
    { 
     List<RectangleF> srex = new List<RectangleF>(); 
     float w = 1f * rect.Width/cols; 
     float h = 1f * rect.Height/rows; 

     for (int c = 0; c < cols; c++) 
      for (int r = 0; r < rows; r++) 
       srex.Add(new RectangleF(w*c, h*r, w,h)); 
     return srex; 
    } 

請注意,返回RectangleF而不是Rectangle以避免精度損失。當你需要一個Rectangle你總是可以得到一個這樣的:

Rectangle rec = Rectangle.Round(srex[someIndex]); 
在面板內部
+0

謝謝..只是我在找什麼 – Adrao

1

要創建的20個矩形列表(像你想的話),你可以這樣做:

List<Rectangle> list = new List<Rectangle>(); 
int maxWidth = 300; 
int maxHeight = 200; 
int x = 0; 
int y = 0; 
while (list.Count < 20) 
{ 
    for (x = 0; x < maxWidth; x += (maxWidth/5)) 
    { 
     for (y = 0; y < maxHeight; y += (maxHeight/4)) 
     { 
      list.Add(new Rectangle(x, y, (maxWidth/5), (maxHeight/4)); 
     } 
     y = 0; 
    } 
    x = 0; 
} 
+0

謝謝,你的解決方案也可以工作,但我試圖使用盡可能少的循環。 – Adrao