如何在 flowlayoutpanel 上正确重用控件?

How reuse correctly controls at flowlayoutpanel?

我有 2 个文本框:

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

35 个隐藏的图片框,其中包含从 .imagelocation 加载的产品图片,名为 picturebox1、picturebox2、picturebox3 等 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

成功了!并正确显示每个项目... 但是,然后我想重复使用相同的 flowlayoutpanel 来显示加油项目,但我没有做到!

有一次,我尝试在 REFUEL BUTTON 上使用:

FlowLayoutPanel1.Controls.clear()

然后第一次添加类似的代码以添加+取消隐藏...但它不起作用,我也尝试了一个新循环来单独删除35个元素(picbxs)..然后再次添加类似的第一代码但不起作用,单独 单独的删除+隐藏看起来像这样:

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

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

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