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

时间:2017-08-05 05:02:03

标签: vb.net controls reusability flowlayout

我有2个文本框:

  1. 待售产品数量,可以是1-35
  2. 加油产品数量,可以是1-35
  3. 35个隐藏的图片框,其中包含来自.imagelocation-名为picturebox1,picturebox2,picturebox3等产品的加载图片 2个按钮:Sale&加油

    销售按钮:一个循环,用于显示可供销售的产品图像数量(从销售号码文本框中计算),然后我将它们分类添加到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工作!并正确显示每个项目...... 但是,我想重复使用相同的flowlayoutpanel来显示加油项目,但是我没有达到这个目的!

    曾经,我尝试过在REFUEL BUTTON使用:

    FlowLayoutPanel1.Controls.clear()
    

    然后添加类似的代码以添加+ unhidde第一次...但是它不工作,我也尝试了一个新的循环来单独删除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 /显示非常快但当我点击butons(销售加油)我几乎可以检测到图片框图像的缓慢重新加载。但点击加油(检查或取消检查)没有任何反应!!屏幕仍然是空的...我认为问题是我如何删除它。有什么建议?? 提前谢谢!

1 个答案:

答案 0 :(得分:0)

我用这种方式解决了:控件(在flowlayoutpanel内部)必须返回到form1容器,而不是清除或移除它们,方法是将它们添加回form1他们被添加到flowpanel的方式。然后他们可以正确使用!