Vb.net 获取对象名称

Vb.net 获取对象名称,vb.net,visual-studio-2010,Vb.net,Visual Studio 2010,这个问题由T.S.解决了 我试图获取对象的名称,但找不到正确的命令。 例如: 我有叫“picXSomething”的图片盒。因此,我使用for循环检查第四位的对象名称字符是否等于“X”(如果是,则表示对象不可见)。 我试过了,但没用: For Each control In Me.Controls If TypeOf control Is PictureBox Then If control.Name(3) = "X" Then

这个问题由T.S.解决了


我试图获取对象的名称,但找不到正确的命令。
例如:
我有叫“picXSomething”的图片盒。因此,我使用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

如何获取对象名称?

如果您正在搜索PictureBox类型的控件,其名称在第四个字符位置包含大写字母“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
请记住,这仅适用于表单控件容器中包含的控件。如果表单有更多容器(GroupBox、Panel),并且图片框包含在这些控件中,则需要在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)
  • 请注意,
    Me.Controls
    仅列出放置的控件 直接在表格上。放置在其他控件上的控件,如 TabControls、GroupBox和SplitContainers将不会列出。你 如果图片框处于打开状态,则必须在这些控件上递归 另一个控件

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

  • 默认情况下,字符串比较区分大小写,因此 如果正在搜索,则在
    “picXSomething”
    中找不到
    “X”
    “x”

  • 您不必强制转换图片框,因为所有控件都有一个
    可见
    属性


  • 如果X是大写的,您的支票将一无所获。顺便说一句,你说的是文本框,但搜索PictureBoxString是字符数组。试试这个:
    control.Name(3)=Char.Parse(“x”)
    。而且,您不需要执行
    DirectCast(控件,PictureBox)。Visible=False
    ,因为
    Visible
    控件的属性。Do
    control.Visible=False