none
Saber si un objeto, o control tienes una propiedad... RRS feed

  • Pregunta

  • Buenas tardes, como puedo saber si un objeto, o control tiene una propiedad...?

    Necesito recorrer todos los controles de un form y segun si los objetos tienen una propiedad, hacer algo... pero no he podido lograr identificar si el objeto tiene o no una propiedad (en mi caso la propiedad cursor y la propiedad font)

    Gracias.

    viernes, 3 de octubre de 2014 19:45

Respuestas

  • "Edward Ocando" preguntó:

    > como puedo saber si un objeto, o control tiene una propiedad...?

    Lo puedes saber mediante la clase PropertyInfo existente en el espacio de nombres System.Reflection.

    > Necesito recorrer todos los controles de un form y segun si
    > los objetos tienen una propiedad, hacer algo... pero no he
    > podido lograr identificar si el objeto tiene o no una
    > propiedad (en mi caso la propiedad cursor y la propiedad font)

    Si el control en cuestión hereda de la clase System.Windows.Forms.Control, digo yo que dispondrá de las propiedades Cursor y Font, incluidos aquellos controles personalizados que hayas heredado de System.Windows.Forms.UserControl, ya que estos también heredan de System.Windows.Forms.Control.

    No obstante, podrías recorrer los controles para conocer si dispone o no de una propiedad en concreto tal y como muestro a continuación:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    ' Recorrer los controles existentes en el formulario actual. For Each ctrl As Control In Me.Controls ' Obtener el Type del control. Dim ty As System.Type = ctrl.GetType() ' Obtener la propiedad Cursor del control. Dim cursor As Reflection.PropertyInfo = ty.GetProperty("Cursor") ' Obtener la propiedad Font del control. Dim font As Reflection.PropertyInfo = ty.GetProperty("Font") Dim msg As String = String.Empty If ((Not cursor Is Nothing) AndAlso (Not font Is Nothing)) Then msg = String.Format("El control {0} dispone de las propiedades Cursor y Font.", ctrl.Name) MessageBox.Show(msg) ' Llamar al procedimiento que proceda pasándole la referencia del control. ' HacerAlgo(ctrl) Else msg = String.Format("El control {0} NO dispone de las propiedades Cursor y Font.", ctrl.Name) MessageBox.Show(msg) End If Next End Sub


    Un saludo


    Enrique Martínez Montejo
            [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.






    domingo, 5 de octubre de 2014 6:52
    Moderador

Todas las respuestas

  • hola

    estos objetos los estas creando tu mismo? lo pregunto porque si es asi podrias hacer que implementan una interfaz

    entonces despues la instancia la casteas con el TryCast() a esa interfaz y si lo hacen correctamente quiere decir que tendran la propiedad o metodo que la interfaz defina

    >>Necesito recorrer todos los controles de un form y segun si los objetos tienen una propiedad

    no lo probe pero si usas una interfaz creo que podrias usar

    Dim list As List(Of ICustomInterfaz) = Me.Controls.OfType(Of ICustomInterfaz).ToList()

    con lo que ni necesitas recorrer los controles

    ---

    sino la otra podria ser usando Reflection, o sea inspeccionas el objeto buscando si tiene determinada propiedad

    si unes esto a linq seria mas simple

    salidos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    viernes, 3 de octubre de 2014 20:04
  • "Edward Ocando" preguntó:

    > como puedo saber si un objeto, o control tiene una propiedad...?

    Lo puedes saber mediante la clase PropertyInfo existente en el espacio de nombres System.Reflection.

    > Necesito recorrer todos los controles de un form y segun si
    > los objetos tienen una propiedad, hacer algo... pero no he
    > podido lograr identificar si el objeto tiene o no una
    > propiedad (en mi caso la propiedad cursor y la propiedad font)

    Si el control en cuestión hereda de la clase System.Windows.Forms.Control, digo yo que dispondrá de las propiedades Cursor y Font, incluidos aquellos controles personalizados que hayas heredado de System.Windows.Forms.UserControl, ya que estos también heredan de System.Windows.Forms.Control.

    No obstante, podrías recorrer los controles para conocer si dispone o no de una propiedad en concreto tal y como muestro a continuación:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    ' Recorrer los controles existentes en el formulario actual. For Each ctrl As Control In Me.Controls ' Obtener el Type del control. Dim ty As System.Type = ctrl.GetType() ' Obtener la propiedad Cursor del control. Dim cursor As Reflection.PropertyInfo = ty.GetProperty("Cursor") ' Obtener la propiedad Font del control. Dim font As Reflection.PropertyInfo = ty.GetProperty("Font") Dim msg As String = String.Empty If ((Not cursor Is Nothing) AndAlso (Not font Is Nothing)) Then msg = String.Format("El control {0} dispone de las propiedades Cursor y Font.", ctrl.Name) MessageBox.Show(msg) ' Llamar al procedimiento que proceda pasándole la referencia del control. ' HacerAlgo(ctrl) Else msg = String.Format("El control {0} NO dispone de las propiedades Cursor y Font.", ctrl.Name) MessageBox.Show(msg) End If Next End Sub


    Un saludo


    Enrique Martínez Montejo
            [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.






    domingo, 5 de octubre de 2014 6:52
    Moderador
  • gracias, me sirvio, lo que deseaba es cambiar el cursor y fuente de algunos objetos.

    Gracias por la info.

    martes, 7 de octubre de 2014 16:30
  • Leandro, saludos voy a revizar esa opcion, gracias.

    martes, 7 de octubre de 2014 16:31