none
¿Cómo puedo obtener el valor de una determinada propiedad de un control pero sin saber de qué tipo de control se trata? (Explico)

    Pregunta

  • Trato de hacer lo siguiente: tengo un método que recibe como parámetro un control genérico y quiero determinar si ese control tiene una propiedad BorderStyle y si tiene esa propiedad quiero guardar ese valor, quitar el borde (ponerlo a 'none'), luego hacer algo y finalmente restituir el borde original.

    Algo más o menos así

    Sub OcultarBorde(UnControl as Control)

    'Aqui guardaria el valor de la propiedad BorderStyle (si se trata de un control que tiene una propiedad BorderStyle)

    ...If (UnControl tiene borde) Then BordeAuxiliar = UnControl.BorderStyle    

    'Aquí le quitaría el borde al control

    ...If (UnControl tiene borde) Then UnControl.BorderStyle = BorderStyle.None

    'Luego haría algo con el control

    .............

    'Finalmente restituirle el valor original de su propiedad BorderStyle del control

    ...If (UnControl tiene borde) Then  UnControl.BorderStyle  = BordeAuxiliar

    End Sub


    • Editado James-2016 martes, 20 de diciembre de 2016 4:04
    martes, 20 de diciembre de 2016 4:03

Respuestas

  • Podrías usar System.Reflection. Para ello, se parte del System.Type del control, y luego se hace un GetProperty para ver si tiene la propiedad deseada:

    Dim t as Type = UnControl.GetType()
    Dim pi as PropertyInfo = t.GetProperty("BorderStyle")
    If pi Is Nothing then ... 'No tiene la propiedad
    Else
       Dim valor as Object = pi.GetValue(UnControl)
    

    Similarmente, el PropertyInfo tiene un SetValue para modificar el valor de la propiedad.

    • Propuesto como respuesta Joyce_ACModerator martes, 20 de diciembre de 2016 16:22
    • Marcado como respuesta James-2016 martes, 20 de diciembre de 2016 16:26
    martes, 20 de diciembre de 2016 10:09

Todas las respuestas

  • Podrías usar System.Reflection. Para ello, se parte del System.Type del control, y luego se hace un GetProperty para ver si tiene la propiedad deseada:

    Dim t as Type = UnControl.GetType()
    Dim pi as PropertyInfo = t.GetProperty("BorderStyle")
    If pi Is Nothing then ... 'No tiene la propiedad
    Else
       Dim valor as Object = pi.GetValue(UnControl)
    

    Similarmente, el PropertyInfo tiene un SetValue para modificar el valor de la propiedad.

    • Propuesto como respuesta Joyce_ACModerator martes, 20 de diciembre de 2016 16:22
    • Marcado como respuesta James-2016 martes, 20 de diciembre de 2016 16:26
    martes, 20 de diciembre de 2016 10:09
  • Gracias, es lo que buscaba.
    martes, 20 de diciembre de 2016 16:26