none
problema con propiedad tipo lista de user control RRS feed

  • Pregunta

  • buenas noches antes que nada un cordial saludo mi problema es el siguiente tengo un control de usuario que tiene un textbox e creado una propiedad tipo lista con algunos parametros el problema es que al parecer solo puedo visualizar la lista no seleccionar ninguna opcion y cuando asigno el valor me sale un error 

        Public Enum Formato_Mayusculas
            Sin_formato
            Primera_letra
            primera_letra_de_cada_palabra
        End Enum
        Public Property Mayusculas As Formato_Mayusculas

            Get
                Return Formato_Mayusculas.Sin_formato
            End Get

            Set(ByVal value As Formato_Mayusculas)
                Mayusculas = value
            End Set

        End Property

    EL ERROR QUE OBTENGO ES 

    La expresión llama recursivamente a la propiedad que contiene 'Mayusculas'.
    lunes, 14 de octubre de 2019 4:10

Respuestas

  • El problema lo tienes en el bloque Set. Estás asignando el valor a la propiedad lo que hace que esa misma asignación vuelva a llamar al Set recursivamente.

    Lo que tienes que hacer es usar una variable de esta forma:

    Dim mMayusculas As Formato_Mayusculas

    Public Property Mayusculas As Formato_Mayusculas

        Get
            Return Formato_Mayusculas.Sin_formato
        End Get

        Set(ByVal value As Formato_Mayusculas)
            mMayusculas = value
        End Set

    End Property

    Veo que el bloque Get devuelve un valor fijo "Sin_formato". Supongo que querrás devolver el valor que tenga la variable

    Get
        Return mMayusculas
    End Get


    Saludos, Javier J

    lunes, 14 de octubre de 2019 6:18
  • Bien, el error que te sale no tiene nada que ver con el hecho de que se trate de una lista o de un control de usuario. Es un error en la definición de la propiedad, y te saldría ese mismo error con independencia de que la propiedad estuviese definida dentro de cualquier otra clase de cualquier otro tipo. El problema es que haces esto:

    Mayusculas = value

    y eso está hecho dentro de Mayusculas.

    Entonces, se mete value dentro de Mayusculas, lo cual implica llamar al setter de Mayusculas, lo cual toma value y lo mete en Mayusculas, lo cual llama al Setter de Mayusculas... Como ves, se mete en un bucle infinito.

    La solución "clásica" es separar el almacenamiento de la propiedad en una variable fuera de la definición de la propiedad:

         Private m_Mayusculas as Formato_Mayusculas = Formato_Mayusculas.Sin_formato
         Public Property Mayusculas As Formato_Mayusculas
             Get
                 Return m_Mayusculas 
             End Get
             Set(ByVal value As Formato_Mayusculas)
                 m_Mayusculas = value
             End Set
         End Property

    lunes, 14 de octubre de 2019 6:22

Todas las respuestas

  • El problema lo tienes en el bloque Set. Estás asignando el valor a la propiedad lo que hace que esa misma asignación vuelva a llamar al Set recursivamente.

    Lo que tienes que hacer es usar una variable de esta forma:

    Dim mMayusculas As Formato_Mayusculas

    Public Property Mayusculas As Formato_Mayusculas

        Get
            Return Formato_Mayusculas.Sin_formato
        End Get

        Set(ByVal value As Formato_Mayusculas)
            mMayusculas = value
        End Set

    End Property

    Veo que el bloque Get devuelve un valor fijo "Sin_formato". Supongo que querrás devolver el valor que tenga la variable

    Get
        Return mMayusculas
    End Get


    Saludos, Javier J

    lunes, 14 de octubre de 2019 6:18
  • Bien, el error que te sale no tiene nada que ver con el hecho de que se trate de una lista o de un control de usuario. Es un error en la definición de la propiedad, y te saldría ese mismo error con independencia de que la propiedad estuviese definida dentro de cualquier otra clase de cualquier otro tipo. El problema es que haces esto:

    Mayusculas = value

    y eso está hecho dentro de Mayusculas.

    Entonces, se mete value dentro de Mayusculas, lo cual implica llamar al setter de Mayusculas, lo cual toma value y lo mete en Mayusculas, lo cual llama al Setter de Mayusculas... Como ves, se mete en un bucle infinito.

    La solución "clásica" es separar el almacenamiento de la propiedad en una variable fuera de la definición de la propiedad:

         Private m_Mayusculas as Formato_Mayusculas = Formato_Mayusculas.Sin_formato
         Public Property Mayusculas As Formato_Mayusculas
             Get
                 Return m_Mayusculas 
             End Get
             Set(ByVal value As Formato_Mayusculas)
                 m_Mayusculas = value
             End Set
         End Property

    lunes, 14 de octubre de 2019 6:22
  • masters me funciono ala perfección los dos ejemplos muchas gracias por su coolaboracion
    lunes, 14 de octubre de 2019 22:41