2017-08-05 92 views
0

我有2个文本框:如何在flowlayoutpanel上正确地重新使用控件?

  1. 产品的销售数量,可以是1-35
  2. 产品加油数量,可以1-35

35个隐藏pictureboxes与加载从.imagelocation产品的图像命名为picturebox1,picturebox2,picturebox3等 2个按钮:销售&加油

销售按钮:使循环显示图像的数量p可供出售RODUCTS(从销售数量,文本框计算的话),接着我将其添加成一个FlowLayoutPanel的:

For i As Integer = 1 To numberofproductstosale.Text 
      If Me.Controls.ContainsKey("PictureBox" & i) Then 
       Me.Controls("PictureBox" & i).Visible = True 
       Me.Controls("PictureBox" & i).Margin = New Padding(0) 
       Dim p1 As PictureBox = CType(Me.Controls("PictureBox" & i), PictureBox) 
       FlowLayoutPanel1.Controls.Add(p1) 
      End If 
     Next 

IT WORKS!并正确显示每个项目... 但是,然后我想重复使用相同的flowlayoutpanel来显示加油项目,但我没有达到做到这一点!

一次,我已经使用在加油按钮尝试:

FlowLayoutPanel1.Controls.clear() 

,再加入类似的代码添加+ unhidde第一次...但它不工作,还我已经尝试了新的循环单独取出35元(picbxs)..并具有类似第一码再次增加,但没有作品,分别个别删除+ hidding看起来像这样:

For i2 As Integer = 1 To 35 
    If Me.Controls.ContainsKey("PictureBox" & i2) Then 
     Me.Controls("PictureBox" & i2).Visible = False 
     Dim p2 As PictureBox = CType(Me.Controls("PictureBox" & i2), PictureBox) 
     FlowLayoutPanel1.Controls.Remove(p2) 
    End If 
Next 

我认为,消除和hiddes正确becau SE从屏幕上的每个项目dissapear .. 然后我尝试添加和再次unhidde的pictureboxes,但现在由加油列表(文本框)的数量决定使用此代码:

For i3 As Integer = 1 To productstorefuel.Text 
      If Me.Controls.ContainsKey("PictureBox" & i3) Then 
       Me.Controls("PictureBox" & i3).Visible = True 
       Me.Controls("PictureBox" & i3).Margin = New Padding(0) 
       Dim p3 As PictureBox = CType(Me.Controls("PictureBox" & i3), PictureBox) 
       FlowLayoutPanel1.Controls.Add(p3) 
End If 
next 

我代码看起来很好,整洁和逻辑!为什么不工作?我在不同的循环中使用i,i2,i3来避免混淆......更好的是:我也尝试隐藏 - 添加到第二个流布局面板中,隐藏第一个面板并将第二个面板带到前面,但不起作用! ..我只能拿回在屏幕上与排序的项..的那部分代码如下所示

FlowLayoutPanel1.visible = false  
FlowLayoutPanel2.visible = true 
For i3 As Integer = 1 To productstorefuel.Text 
      If Me.Controls.ContainsKey("PictureBox" & i3) Then 
       Me.Controls("PictureBox" & i3).Visible = True 
       Me.Controls("PictureBox" & i3).Margin = New Padding(0) 
       Dim p3 As PictureBox = CType(Me.Controls("PictureBox" & i3), PictureBox) 
       FlowLayoutPanel2.Controls.Add(p3) 
End If 
next 
    FlowLayoutPanel2.BringToFront() 

注意第一面板:代码的,我知道的第一部分(销售部门)是好的因为我的按钮是真正的复选框与按钮方面,然后,我可以看到处理速度因为当我取消选中销售按钮的图片框只是隐藏/显示速度非常快,但当我点击butons(销售 - 加油)我几乎可以检测图片盒图像的缓慢重新加载。但点击加油(检查或取消选中)没有任何反应!屏幕仍然是空的...我认为问题是我如何删除它。有什么建议么?? 在此先感谢!

+0

要做到这一点,更好的方法是获得一个35个图片盒的阵列,然后每次添加许多您需要的面板。事实上,你的代码泄露了。 – Plutonix

+0

我已经解决了这个问题:控件必须返回到form1容器中,而不是清除或删除它们....以与添加到流程面板相同的方式添加回form1 ...然后可以重复使用它们.. – arc95

回答

0

我解决了这种方式:(内flowlayoutpanel)控件必须重新进入form1容器,而不是清除或删除它们,在它们被加入到flowpanel同样的方法添加他们回到form1。然后他们可以正确地重用!

相关问题