如何在 flowlayoutpanel 上正确重用控件?
How reuse correctly controls at flowlayoutpanel?
我有 2 个文本框:
- 待售产品数量,可以是1-35
- 要加油的产品数量,可以是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
的方式相同。然后它们就可以正确地重复使用了!
我有 2 个文本框:
- 待售产品数量,可以是1-35
- 要加油的产品数量,可以是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
的方式相同。然后它们就可以正确地重复使用了!