none
¿Hay forma de hacer lo siguiente con propiedades de objetos? RRS feed

  • Pregunta

  • Suponiendo que tengo un control Panel llamado Panel1 y quiero variar la propiedad Left o Top de dicho control.

    Como Left y Top tienen el mismo tipo de datos, ¿se puede referenciar a ambos desde un tercer objeto de manera que haga referencia a uno u otro?

    ------------------------------------------------------------------------------------------------

    Algo así más o menos. Suponiendo que Tope referencie a Panel1.Left:

    Tope = Panel1.Left  (Esto asigna el valor de Left a Tope, pero supongan que no lo asigna, sino que lo referencia...

    De manera que  si digo:

    Tope = 10

    Panel1.Left adquiere el valor 10, y si digo:

    Tope = Panel1.Top y asigno:

    Tope = 15

    Ahora Panel1.Top tiene el valor de 15

    ¿En otras palabras hay forma de referenciar ambas  propiedades (Top y Left) indicándole a un tercer campo o propiedad que haga referencia a estas de manera que el valor asignado a Tope lo asigne a su vez a la propiedad que referencia Tope en ese momento, que puede ser una u otra?

    sábado, 24 de octubre de 2020 3:46

Respuestas

  • Si se puede a eso se le llama crear un enlace entre propiedades la clase binding te crea un enlace entre la propiedad de un control y la propiedad de un objecto
    • Editado DANTE-3D sábado, 24 de octubre de 2020 5:42 mejor informacion
    • Marcado como respuesta James2016-2 sábado, 24 de octubre de 2020 15:31
    sábado, 24 de octubre de 2020 5:12
  • Eso que quieres hacer funciona con las propiedades tipo-referencia, pero no funciona con las tipo-valor.

    En el caso de Left y Top en el Panel, son tipo-valor, por lo que no tienes esa funcionalidad. Pero si lo haces con una clase tuya y usas tipos-referencia, sí que te funcionará lo de que al cambiar el valor de tu variable se cambie el valor de la propiedad que le asignaste. Pongamos un ejemplo:

    Public Class MiTipoReferencia
        Public Property Valor As Integer
    End Class
    
    Public Class MiPanel
        Private mLeft As New MiTipoReferencia
        Public Property Left() As MiTipoReferencia
            Get
                Return mLeft
            End Get
            Set(ByVal value As MiTipoReferencia)
                mLeft = value
            End Set
        End Property
    
        Private mTop As New MiTipoReferencia
        Public Property Top() As MiTipoReferencia
            Get
                Return mTop
            End Get
            Set(ByVal value As MiTipoReferencia)
                mTop = value
            End Set
        End Property
    End Class
    
    '.....
    
    Dim pnl As New MiPanel
    Dim miValor As MiTipoReferencia
    
    miValor = pnl.Top
    miValor.Valor = 10 'Esto mete 10 en Top
    
    miValor = pnl.Left
    miValor.Valor = 20 'Esto mete 20 en Left
    

    • Marcado como respuesta James2016-2 sábado, 24 de octubre de 2020 15:31
    sábado, 24 de octubre de 2020 9:09
  • Deleted
    • Marcado como respuesta James2016-2 sábado, 24 de octubre de 2020 15:31
    sábado, 24 de octubre de 2020 14:04

Todas las respuestas

  • Si se puede a eso se le llama crear un enlace entre propiedades la clase binding te crea un enlace entre la propiedad de un control y la propiedad de un objecto
    • Editado DANTE-3D sábado, 24 de octubre de 2020 5:42 mejor informacion
    • Marcado como respuesta James2016-2 sábado, 24 de octubre de 2020 15:31
    sábado, 24 de octubre de 2020 5:12
  • Eso que quieres hacer funciona con las propiedades tipo-referencia, pero no funciona con las tipo-valor.

    En el caso de Left y Top en el Panel, son tipo-valor, por lo que no tienes esa funcionalidad. Pero si lo haces con una clase tuya y usas tipos-referencia, sí que te funcionará lo de que al cambiar el valor de tu variable se cambie el valor de la propiedad que le asignaste. Pongamos un ejemplo:

    Public Class MiTipoReferencia
        Public Property Valor As Integer
    End Class
    
    Public Class MiPanel
        Private mLeft As New MiTipoReferencia
        Public Property Left() As MiTipoReferencia
            Get
                Return mLeft
            End Get
            Set(ByVal value As MiTipoReferencia)
                mLeft = value
            End Set
        End Property
    
        Private mTop As New MiTipoReferencia
        Public Property Top() As MiTipoReferencia
            Get
                Return mTop
            End Get
            Set(ByVal value As MiTipoReferencia)
                mTop = value
            End Set
        End Property
    End Class
    
    '.....
    
    Dim pnl As New MiPanel
    Dim miValor As MiTipoReferencia
    
    miValor = pnl.Top
    miValor.Valor = 10 'Esto mete 10 en Top
    
    miValor = pnl.Left
    miValor.Valor = 20 'Esto mete 20 en Left
    

    • Marcado como respuesta James2016-2 sábado, 24 de octubre de 2020 15:31
    sábado, 24 de octubre de 2020 9:09
  • Deleted
    • Marcado como respuesta James2016-2 sábado, 24 de octubre de 2020 15:31
    sábado, 24 de octubre de 2020 14:04
  • Gracias a todos. Veo que hay varias alternativas.
    sábado, 24 de octubre de 2020 15:32
  • Tenia un ejemplo pero es muy parecido al de zuRimAn jejejeje
    sábado, 24 de octubre de 2020 15:57
  • Gracias por levantar tu consulta en los foros de MSDN. Cerraremos el Hilo, por ende si tiene alguna otra consulta por favor genera otra consulta para que la comunidad de foros te pueda asesorar.

     

    Siempre es un placer atender tus consultas!

    --------------------------------------------------------------------------------

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN sientase en la libertad de contactar  MSDNFSF@microsoft.com. 

    martes, 27 de octubre de 2020 16:00
    Moderador