vb.net - 在 Visual Basic 2010 中动态循环图片框控件似乎不遵循任何顺序

标签 vb.net vb6 vb.net-2010

在 Visual Basic 2010 表单应用程序中,我有以下代码片段:

For Each ctlControl In Me.Panel1.Controls
    If TypeName(ctlControl) = "PictureBox" Then
        ctlControl.image = Nothing
    End If
Next ctlControl

我的问题是,当它循环遍历控件时,它不是从左上角的控件开始,而且它似乎以随机顺序遍历每个图片框。

如何控制接下来更新哪个图片框的顺序。是否有类似于选项卡索引(在 VB 6 中)的属性,我可以操纵它来控制循环更新图片框的顺序?

最佳答案

作为一种更正确、更可靠的方法,我会获取每个图片框,保留它们的句柄和位置,然后根据它们的位置对它们进行排序。现在它们可以使用了。这是一个例子:

Public Class Form1
    Structure Pbox
        Dim handle As IntPtr
        Dim top As Integer
        Dim left As Integer
    End Structure
    Dim pboxlist As New List(Of Pbox)
    Sub ClearImages()
        pboxlist.Clear()
        For Each c As Control In Me.Controls
            If TypeName(c) = "PictureBox" Then
                Dim x As New Pbox
                x.top = c.Top
                x.left = c.Left
                x.handle = c.Handle
            End If
        Next
        pboxlist.OrderByDescending(Function(a) a.top).ThenByDescending(Function(a) a.left)
        For Each item In pboxlist
            Dim x As PictureBox = PictureBox.FromHandle(item.handle)
            x.Image = Nothing
        Next
    End Sub
End Class

另一种方法是使用良好的命名,以便您可以使用它们的名称对它们进行排序。例如,如果排序,PictureBox1 将排在 PictureBox2 之前。所以你应该使用 PictureBox1 作为最上面和最左边的一个,使用 PictureBox2 作为下一个,依此类推...

编辑:按照 John Bustos 的建议,使用 Tag 属性代替名称是一个更简单、更好的主意。因此,您可以根据您定义的标签对图片​​框进行排序,而不会迷失在名称中。

关于vb.net - 在 Visual Basic 2010 中动态循环图片框控件似乎不遵循任何顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14129652/

相关文章:

vb.net - Crystal Report - 传递 DateRange 参数

vb.net - 如何在后台线程中运行代码并仍然访问UI?

vb.net - Shell命令使用字符串确定文件名

vb6 - 如何将 VB 6.0 中的 Application.PrevInstance 转换为 VB.NET?

.net - 逐渐将一个巨大的、单一的 VB6 winforms 应用程序重构到 .Net

java - 打开没有 Auto_Openening 的工作簿

asp.net - Tweetsharp .NET 库无法在线工作

mysql - 无法连接到远程mysql数据库服务器

mysql - 如何使用vb.net检查记录是否存在,如果不存在则插入?

vb.net - 如何在使用Visual Basic创建的办公室功能区中添加类似DateTimePicker的控件?