none
Verificar controles de formulario en orden de tabulacion en 'For Each Control In Me.Controls' RRS feed

  • Pregunta

  • Tengo una función para verificar los controles del formulario que están en blanco antes de guardar datos.

    Si un campo esta en blanco, se enfoca en este y ahí se queda.

    El problema es que lee "each control" aletaoriamente y no de acuerdo al orden de tabulacion del campo.

    La idea es que que verifique los campos vacios de arriba a abajo de acuerdo al tab y se detenga en el primero que no tenga datos.

    Pero se detiene en cualquier otro primero antes que los de arriba aunque esten en blanco algunos.

    ¿Como controlo el orden "each"?

             

     Private Function VerificaVacios() As Boolean
            For Each Control In Me.Controls
         

          If Control.tag = "tx" Then  ' 'tx' se refiere a solo los campos de datos para separarlo de las etiquetas
                  

                    If Control.text Is String.Empty Then

                        MsgBox("Quedan campos vacios", MsgBoxStyle.Information)

                        Control.Focus

                        Return False
           

                      Exit Function
     

                  End If
                End If

         

       Next Control
             Return True
        End Function


    Luis C


    domingo, 8 de septiembre de 2019 17:10

Respuestas

  • ¿Como controlo el orden "each"?

    El orden que sigue es el orden en que los controles se agregaron a la colección controls. Podrías editar el InitializeComponent y reordenar la creación de controles para que sea el orden en que quieras que funcione el foreach.

    O también podrías meter un "orderby" usando los extensores LINQ (Imports System.Linq):

    For Each ctl as Control in Me.Controls.Orderby(Function(c) c.TabOrder)


    domingo, 8 de septiembre de 2019 17:21

Todas las respuestas

  • ¿Como controlo el orden "each"?

    El orden que sigue es el orden en que los controles se agregaron a la colección controls. Podrías editar el InitializeComponent y reordenar la creación de controles para que sea el orden en que quieras que funcione el foreach.

    O también podrías meter un "orderby" usando los extensores LINQ (Imports System.Linq):

    For Each ctl as Control in Me.Controls.Orderby(Function(c) c.TabOrder)


    domingo, 8 de septiembre de 2019 17:21
  • Gracias, es la respuesta.

    Lo resolví asi:

     For Each Control In Me.Controls.Cast(Of Control).OrderBy(Function(c) c.TabIndex)


    Luis C

    domingo, 8 de septiembre de 2019 17:37