代码之家  ›  专栏  ›  技术社区  ›  Jim

在vb2005中检查窗体上所有控件的最佳方法是什么

  •  1
  • Jim  · 技术社区  · 16 年前

    在VB2005中,检查窗体上所有控件的最佳方法是什么? 我正在编写一个程序,可以根据表单上的信息编辑一个字节串。 每个控件都用它所修改的十六进制地址和值进行标记,哪种方式是通过窗体上的所有控件(即使是嵌入在其他控件中的控件)的最佳方式?

    4 回复  |  直到 16 年前
        1
  •  6
  •   stuartd saeed    16 年前

    类似这样,传递表单以开始:

    Private Sub DoSomethingToAllControls(ByVal Container As Control)
        Dim ctl As Control
        For Each ctl In Container.Controls
            ' Do Something..
    
            ' Recursively call this function for any container controls.
            If ctl.HasChildren Then
                DoSomethingToAllControls(ctl)
            End If
        Next
    End Sub
    
        2
  •  1
  •   dtoland    16 年前

    从当前窗体获取System.Windows.Forms.Control.ControlCollection(Me.Controls)的实例。从那里开始单步执行集合中的控件。

        3
  •  1
  •   Daniel Brückner    16 年前

    这是C,但应该给出这个想法。函数只是递归地枚举所有控件,您可以根据需要对它们进行操作。

    public static IEnumerable<Control> GetControlsRecursive(Control control)
    {
        yield return control;
    
        foreach (Control directSubcontrol in control.Controls)
        {
            foreach (Control subcontrol in GetControlsRecursive(directSubcontrol))
            {
                yield return subcontrol;
            }
        }
    }
    

    用法是这样的。

    foreach (Control control in GetControlsRecursive(myForm))
    {
        DoStuff(control);
    }
    

    解决方案没有 yield return 语句在vb.net中不可用。

    public static IEnumerable<Control> GetControlsRecursive(Control control)
    {
        List<Control> controls = new List<Control>() { control };
    
        foreach (Control subcontrol in control.Controls)
        {
            controls.AddRange(GetControlsRecursive(subcontrol));
        }
    
        return controls;
    }
    
        4
  •  0
  •   Jim    16 年前
    Private Sub enumerateControls(ByVal controlcontainer As Object)
            Dim basec As Control = controlcontainer
            If basec.HasChildren Then
                For Each itm As Control In basec.Controls
                    enumerateControls(itm)
                Next
            End If
            If controlcontainer.tag IsNot Nothing Then
    run function to determine control type and function
    
            End If
        End Sub