tincho   31-08-2023, 16:04
#1
Hola crustaceos.
Para recorrer los controles de un formulario de forma recursiva les planteo este método que me viene dando buenos resultados.

Código:
'' Este método recibe un objeto como parámetro de entrada y devuelve ,por la
'' salida estándar, el tipo de objeto, el objeto padre y, si existen, los
'' simbolos Text, Value y Tag. Es un método recursivo puesto que si el objeto
'' tiene hijos se llama a si mismo y pasa el contenedor como parametro. Esta
'' pensado para recorrer controles de un formulario que inicialmente se pasa
'' como parametro, y luego recorrer hasta el último nivel de anidamiento en
'' el que exista un control.
'' *eng* This method takes an object as an input parameter and returns, via
'' standard output, the type of the object, the parent object, and, if they
'' exist, the symbols Text, Value, and Tag. It is a recursive method since if
'' the object has children it calls itself and passes the container as a
'' parameter. It is intended to loop through form controls, this form is
'' initially passed as a parameter, and then loop through to the last nesting
'' level in which a control exists.

Public Sub Looper(ob As Object)

  Dim ch As Object
  Dim sTag, sVal As String
  Dim cls As Class
  Dim aSymbols As New String[]
  Dim sMark As String

  Select Object.Class(ob).Parent.Name
    Case "Form", "Container", "UserContainer"
      For Each ch In ob.Children
        Looper(ch)
      Next
    Case "Control", "UserControl", "TextBox", "Label"
      sMark = ""
      cls = Classes[Object.Class(ob).Parent.Name]
      If cls.Symbols.Exist("Tag") Then
        If ob.Tag = "" Then
          aSymbols.Add("Symbol.Tag.Empty")
        Else
          aSymbols.Add("Symbol.Tag." & ob.Tag)
        Endif
      Else
        aSymbols.Add("Symbol.Tag.None")
      Endif

      If cls.Symbols.Exist("Text") Then
        If ob.Text = "" Then
          aSymbols.Add("Symbol.Text.Empty")
        Else
          aSymbols.Add("Symbol.Text." & ob.Text)
        Endif
      Else
        aSymbols.Add("Symbol.Text.None")
      Endif

      If cls.Symbols.Exist("Value") Then
        If ob.Value <> 0 Then
          aSymbols.Add("Symbol.Value." & CStr(ob.Value))
        Else
          aSymbols.Add("Symbol.Value.Empty")
        Endif
      Else
        aSymbols.Add("Symbol.Value.None")
      Endif
    Case Else
      sMark = "#"
  End Select

  Print sMark & Object.Class(ob).Parent.Name & ":" & Object.Class(ob).Name & ":" & aSymbols.Join(":")

End
Última modificación: 01-09-2023, 14:40 por tincho.

1 Saludo.
  
Usuarios navegando en este tema: 1 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.