2013-08-07 18 views
0

我想手动创建的PictureBox和标签上的水平面板,图片框的数量和面板未知的标签,也许200或更多或更少,我用下面的代码,这样做,但我面对两个困难第一招: 我想补充的第一次创建新的对象不到底例如,如果我创建的项目“ABCDE”希望它加上面板“EDCBA”希望总是新来第一。 注意:面板宽度“230”高度“710” 第二个问题: 当前当我使用面板滚动条往下添加新对象查找发生最后一个对象创建和新的大自由空间,如果我使用再次滚动下来,在面板上创建新的对象发生更大的可用空间。创建面板对象和安排对象在第一个新的不结束

  int Right = 50, Top = 0; 

      // Create Image + Text 
      PictureBox pbox = new PictureBox(); 
      pbox.Size = new Size(140, 80); 
      pbox.Location = new Point(Right, Top); 
      pbox.Image = Image.FromFile(""); 
      Panel1.Controls.Add(pbox); 


      // Create label 
      Label lblPlateNOBAR = new System.Windows.Forms.Label(); 
      lblPlateNOBAR.Text = lblPlateNO.Text; 
      lblPlateNOBAR.Location = new Point(Right + 20, Top + 80); 
      Panel1.Controls.Add(lblPlateNOBAR); 

      Top = Top + 150; 

回答

0

为了使物体插入面板,你需要移动它已经存在于面板中的控件:

int right = 50; 

// Create Image + Text 
PictureBox pbox = new PictureBox(); 
pbox.Size = new Size(140, 80); 
pbox.Location = new Point(right, 0); 
pbox.Image = Image.FromFile(""); 

// Create label 
Label lblPlateNOBAR = new System.Windows.Forms.Label(); 
lblPlateNOBAR.Text = lblPlateNO.Text; 
lblPlateNOBAR.Location = new Point(right + 20, 80); 

foreach(var control in Panel1.Controls) 
{ 
    control.Top = control.Top + 150; 
} 

Panel1.Controls.Add(pbox); 
Panel1.Controls.Add(lblPlateNOBAR); 
+0

foreach(pnSettings.Controls中的控件控件) control.Top = control.Top + 150; } –

+0

@ user1530499更简洁: 'foreach(Control control in pnSettings.Controls)control.Top + = 150;' 不需要眉毛托架,你可以使用+ =操作符:) – ehsan88

0

我知道它似乎我不是回答你的问题,但你也可以花很少的时间来了解我的建议。我不知道你想达到什么样的,但是当你要做出这样一个复杂的程序,这是一个更好的做法,你做所有的工作需要自己,而不是依赖于Windows窗体控件。尝试添加,删除,更改许多控件的位置会极大地降低应用程序的性能。我建议你画的,例如你的照片,你自己,用GraphicsImage对象和Paint事件。还要处理点击和选择图片MouseEvents。也许起初似乎有点辛苦,但是你做到了这一点后,你有更好的性能和灵活性。考虑到你提到你想在面板中放置200张照片,这变得更加重要。这也可以防止更改许多控件位置时出现的闪烁问题。这是很好的一提的是做在这种情况下滚动,你可以放置一个Panel一个家长Panel内,并使用AutoScroll功能仅适用于父面板处理滚动。这样你就不必关心滚动了。

+0

太好了,我喜欢你的父母想法面板和子面板它解决了问题容易。关于绘制对象,我不知道这将如何使性能比使用Windows窗体控件更好,对不起,因为我没有这方面的经验,请你给我建议链接解释或向我解释更多:) –

+0

@ user1530499我想你会看到一些闪烁,当你添加很多控制,并把他们所有的150像素。另外,如果您一次添加200个控件,则需要一些时间。同时存储200个控件占用大量内存。每个控制类存储许多您不需要的信息。现在个人电脑拥有比以前更多的资源,但这并不意味着我们应该破坏资源。应该与所需的工作和资源保持适当的对应关系。然而,有时它更好地做你现在已经知道的事情,但是考虑更好的未来方式。 – ehsan88