2013-04-25 39 views
1

我想获得随机绘制的矩形排列在窗体上彼此相邻,但我的循环不工作,给我不想要的结果,任何帮助将不胜感激。如何将随机绘制的矩形垂直堆叠在一起?

我已经创建了一个创建随机矩形然后将它们存储在列表集合中的方法。

List<Rectangle> rectangleCollection = new List<Rectangle>(); 

    void CreateRectangle() 
    { 
     int TallestRectangle = 0; ; 
     int PrevRecX = 0; 
     int PrevRecY = 0; 

     Pen pen = new Pen(Color.Black); 
     Graphics graphic = this.CreateGraphics(); 


     foreach (Rectangle rect in rectangleCollection) 
     { 
      if (rect.Height > TallestRectangle) 
       TallestRectangle = rect.Height; 
     } 

     foreach (Rectangle rect in rectangleCollection) 
     { 
      if (PrevRecX + PrevRecY == 0) 
      { 
       graphic.DrawRectangle(pen, new Rectangle(rect.X, (TallestRectangle - rect.Height), rect.Width, rect.Height)); 
      } 
      else 
      { 
       graphic.DrawRectangle(pen, new Rectangle((PrevRecX + PrevRecY), (TallestRectangle - rect.Height), rect.Width, rect.Height)); 
      } 
      PrevRecX = rect.X; 
      PrevRecY = rect.Width; 
     } 

    } 

    void GetRandomRectangle() 
    { 
     Random ran = new Random(); 

     int x = 0; 
     int y = 0; 

     int width = ran.Next(100, 500); 
     int height = ran.Next(200, 700); 

     Rectangle rec = new Rectangle(x, y, width, height); 

     rectangleCollection.Add(rec); 
    } 
+1

什么“令人失望的结果”?你得到了什么?这与你的期望有什么不同? – Corak 2013-04-25 07:18:55

+0

如果问题是所有的矩形都是相同的大小:每次调用'GetRandomRectangle'时不要创建一个'Random'对象。有*一个*静态的,并使用它。 – Corak 2013-04-25 07:24:07

+0

@Corak我的不想要的结果是我的矩形没有对齐,并且重叠,也请给我一个有一个静态随机对象并使用它的例子(对不起,我是一个新的)。 – TheJunior 2013-04-25 07:29:49

回答

0

你的第二个foreach看起来太复杂了。我不认为你真的需要PrevRecX。试试看看它是否符合你的期望。

void CreateRectangle() 
{ 
    int TallestRectangle = 0; 
    int PrevRecY = 0; 

    Pen pen = new Pen(Color.Black); 
    Graphics graphic = this.CreateGraphics(); 

    foreach (Rectangle rect in rectangleCollection) 
    { 
    if (rect.Height > TallestRectangle) 
     TallestRectangle = rect.Height; 
    } 

    foreach (Rectangle rect in rectangleCollection) 
    { 
    graphic.DrawRectangle(pen, new Rectangle(rect.X + PrevRecY, (TallestRectangle - rect.Height), rect.Width, rect.Height)); 
    PrevRecY += rect.Width; // note the += 
    } 
} 

对于static Random,只是申报方式外的变量,并使用它里面,这样的:

private static Random ran = new Random(); 
void GetRandomRectangle() 
{ 
    int x = 0; 
    int y = 0; 

    int width = ran.Next(100, 500); 
    int height = ran.Next(200, 700); 

    // ... 
} 
+0

非常感谢你的作品!现在,它们是垂直堆叠的,我需要计算输出矩形,然后水平显示它们,同时保持它们垂直堆叠时的形状。 – TheJunior 2013-04-25 08:02:49

+0

如果你有垂直堆叠覆盖,你应该很容易地自己水平堆叠。主要计算最宽的矩形,相应地计算位置和'+ ='高度。什么是“输出矩形”?那是围绕着所有显示的矩形吗?这应该有与tallesRectangle相同的高度,宽度应该是所有宽度的总和。 – Corak 2013-04-25 08:50:02

+0

这基本上是我必须实现的:http://social.msdn.microsoft.com/Forums/getfile/139053 – TheJunior 2013-04-25 09:01:22