如何在流布局面板上正确重用控件?



我有 2 个文本框:

  1. 待售产品数量,可为1-35
  2. 加油产品数量,可为1-35

35个隐藏的图片框,其中包含从.imagelocation加载的产品图像 - 命名为图片框1,图片框2,图片框3等 2 个按钮:销售和加油

销售按钮:一个循环,用于显示可供销售的产品图像数量(从销售编号文本框中计算(,然后我对它们进行排序,将其添加到流程布局面板中:

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

它有效!并正确显示每个项目... 但是,然后我想重复使用相同的流程布局面板来显示加油项目,但我没有伸手去做!

有一次,我尝试使用加油按钮:

FlowLayoutPanel1.Controls.clear()

然后添加类似的代码来添加+取消隐藏第一次...但它不起作用,我也尝试了一个新的循环来单独删除 35 个元素 (picbx(。并使用类似的第一个代码再次添加但不起作用,单独删除+隐藏如下所示:

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

我认为可以正确删除和隐藏,因为每个项目都会从屏幕上消失。 然后我尝试再次添加和取消隐藏图片框,但现在由使用以下代码的加油列表(文本框(的编号决定:

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()

注意:我知道代码的第一部分(销售部分(很好,因为我的按钮实际上是带有按钮方面的复选框,然后,我可以看到处理速度,因为当我取消选中销售按钮时,图片框只是隐藏/显示非常快,但是当我在按钮之间单击时(销售加油(,我几乎可以检测到图片框图像缓慢重新加载。 但是点击加油(选中或取消选中(没有任何反应!! 屏幕保持空白...我认为问题在于我如何删除它。有什么建议吗?? 提前感谢!

我是这样解决的:控件(flowlayoutpanel内部(必须回到form1容器中,而不是清除或删除它们,方法是将它们添加回form1,就像将它们添加到flowpanel中一样。然后它们可以正确重复使用!

最新更新