none
Activar o desactivar un boton sin tener el nombre previo RRS feed

  • Pregunta

  • estoy realizando un formulario de control de acceso, una ves que valido que tipo de usuario es necesito activar o desactivar los botones de un formulario según los permisos, cuando inicio el programa cargo la tabla con esos nombre pero no se como hacerle para decirle que ponga la propiedad ENABLED = FALSE de un botón cuando el nombre de ese botón lo tengo en una cadena de texto.

    ejemplo: obtengo el nombre del botón llamado destinos en una variable que se llama cadena, como le hago para decirle al formulario que

    cadena.enabled.false  donde el valor de la cadena es "Destinos" para que vb lo interprete así --> destinos.enabled = false

    intente hacer algo así pero no me funciona

    dim botn as new button

                botn.Name = cadena
                botn.IsEnabled = False

    gracias por su ayuda

    lunes, 7 de diciembre de 2015 19:39

Respuestas

  • Hola Oscar Landaverde,

    Lo que puedes hacer es recorrer los controles del contenedor donde se encuentra el objeto y preguntar por la propiedad Name, algo como lo siguiente:

    Dim nombreBoton As String = "Destinos"
    
    For Each objeto As Control In Me.Controls
    	If objeto.Name = nombreBoton Then
    		objeto.Enabled = False
    	End If
    Next

    lunes, 7 de diciembre de 2015 20:18
  • "Oscar Landaverde" escribió:

    > ... no se como hacerle para decirle que ponga la propiedad ENABLED = FALSE de
    > un botón cuando el nombre de ese botón lo tengo en una cadena de texto.

    Hola, Óscar:

    Si en una cadena alfanumérica tienes el valor de la propiedad Name de un control Button:

        Dim cadena As String = "Destinos"

    Puedes referenciar dicho control Button mediante el método Find de la colección Controls del formulario que contiene a dicho control:

        ' Referenciamos el control llamado Destinos.
        '
        Dim ctrl As Control = Me.Controls.Find(cadena, False)(0)
    
        ' Lo deshabilitamos.
        '
        ctrl.Enabled = False
    


    ¿Qué son varios controles los que tienes que habilitar/deshabilitar? Entonces no hay nada mejor que construirte tu propia función para que te devuelva la referencia de un control de acuerdo a su nombre:

        Private Function GetControlByName(name As String) As Control
            Return Me.Controls.Find(name, False)(0)
        End Function


    Y llamarías a la función de la siguiente manera:

         Dim cadena As String = "Destinos"
         GetControlByName(cadena).Enabled = False
    
         cadena = "Button3"
         GetControlByName(cadena).Enabled = True
    
         cadena = "TextBox2"
         GetControlByName(cadena).Enabled = False
    

    Fíjate que puedes especificar cualquier tipo de control que herede de la clase System.Windows.Forms.Control: Button, TextBox, CheckBox, ComboBox, DataGridView, etc.

    Se comprende que los nombres de los controles que le pases a la función GetControlByName deben de existir en el formulario porque de lo contrario obtendrás la siguiente excepción: Índice fuera de los límites de la matriz.

    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.

    martes, 8 de diciembre de 2015 15:21
    Moderador

Todas las respuestas

  • Hola Oscar Landaverde,

    Lo que puedes hacer es recorrer los controles del contenedor donde se encuentra el objeto y preguntar por la propiedad Name, algo como lo siguiente:

    Dim nombreBoton As String = "Destinos"
    
    For Each objeto As Control In Me.Controls
    	If objeto.Name = nombreBoton Then
    		objeto.Enabled = False
    	End If
    Next

    lunes, 7 de diciembre de 2015 20:18
  • "Oscar Landaverde" escribió:

    > ... no se como hacerle para decirle que ponga la propiedad ENABLED = FALSE de
    > un botón cuando el nombre de ese botón lo tengo en una cadena de texto.

    Hola, Óscar:

    Si en una cadena alfanumérica tienes el valor de la propiedad Name de un control Button:

        Dim cadena As String = "Destinos"

    Puedes referenciar dicho control Button mediante el método Find de la colección Controls del formulario que contiene a dicho control:

        ' Referenciamos el control llamado Destinos.
        '
        Dim ctrl As Control = Me.Controls.Find(cadena, False)(0)
    
        ' Lo deshabilitamos.
        '
        ctrl.Enabled = False
    


    ¿Qué son varios controles los que tienes que habilitar/deshabilitar? Entonces no hay nada mejor que construirte tu propia función para que te devuelva la referencia de un control de acuerdo a su nombre:

        Private Function GetControlByName(name As String) As Control
            Return Me.Controls.Find(name, False)(0)
        End Function


    Y llamarías a la función de la siguiente manera:

         Dim cadena As String = "Destinos"
         GetControlByName(cadena).Enabled = False
    
         cadena = "Button3"
         GetControlByName(cadena).Enabled = True
    
         cadena = "TextBox2"
         GetControlByName(cadena).Enabled = False
    

    Fíjate que puedes especificar cualquier tipo de control que herede de la clase System.Windows.Forms.Control: Button, TextBox, CheckBox, ComboBox, DataGridView, etc.

    Se comprende que los nombres de los controles que le pases a la función GetControlByName deben de existir en el formulario porque de lo contrario obtendrás la siguiente excepción: Índice fuera de los límites de la matriz.

    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.

    martes, 8 de diciembre de 2015 15:21
    Moderador