获取对象名称

时间:2015-01-03 23:02:28

标签: vb.net visual-studio-2010

T.S。

解决了这个问题

我试图得到一个对象的名字,但我找不到合适的命令 例如:
我有PicturetBoxes打电话" picX Something "。所以我使用for循环来检查第四个位置的对象名称的字符是否等于" X" (如果是 - 对象不可见) 我尝试过这个,但它不起作用:

For Each control In Me.Controls
        If TypeOf control Is PictureBox Then
            If control.Name(3) = "X" Then
                DirectCast(control, PictureBox).Visible = False
            End If
        End If
Next

如何获取对象名称?

2 个答案:

答案 0 :(得分:0)

如果您正在搜索PictureBox类型的控件,其第四个char位置的名称包含大写字母“X”,您可以写

' Using IEnumerable methods to isolate only the controls of type picturebox required
For Each pictBox In Me.Controls.OfType(Of PictureBox)().Where(Function(x) x.Name(3) = "X"c)
    pictBox.Visible = false
Next

请记住,这仅适用于Form Controls容器中包含的控件。如果您的表单有更多容器(GroupBoxes,Panels)并且图片框包含在这些控件中,那么您需要遍历GroupBox或Panel控件集合。此方案需要递归函数来检查每个容器

Public sub HidePics(cc as Control.ControlCollection)    
    For Each controlObject In cc
        Dim ctr = DirectCast(controlObject, Control)
        HidePics(ctr.Controls)
    Next
    For Each pictBox In cc.OfType(Of PictureBox)().
                        Where(Function(x) x.Name(3) = "X"c)
        pictBox.Visible = false
    Next
End Sub

从表单代码中调用

HidePics(Me.Controls)

答案 1 :(得分:0)

  1. 请注意Me.Controls仅列出放置的控件 直接在表格上。控件放在其他控件上 TabControls,GroupBoxes,SplitContainers将不会列出。您 如果您的图片框已打开,则必须对这些控件进行递归 另一个控制。

  2. control.Name(3)返回一个字符。所以使用字符文字 "X"c

  3. 默认情况下,字符串比较区分大小写,因此您将这样做 如果您正在搜索,则无法找到"X"中的"picXSomething" "x"

  4. 您不必投射图片框,因为所有控件都有 Visible财产。