none
BLOQUEAR UN COMBOBOX SEGUN EL DATO SELECCIONADO RRS feed

  • Pregunta

  • Como dice el titulo deseo bloquear un combobox segun el dato que seleccione cabe señalar que el combobox esta lleno con datos de una tabla de mi base de datos algun consejo o ejemplode como podria realizer algo asi ?
    martes, 26 de junio de 2018 15:21

Respuestas

  • "Darwin123456" escribió:

    > Sub Filtro_Campo_Escribiendo_Clave()
    >    Dim sql As String = "Select * from Material where Clave Like '%" & TxtBuscarMaterial.Text & "%'"
    >    Cargar_SQLite(sql, DGVDatosMaterial)
    > End Sub
    >
    > sobre el evento SelectedIndexChanged(sender As Object, e As EventArgs) Handles
    > realizo una busqueda , solo inserto la function de busqueda quizas eso esta causando conflict

    ¿No crees que te deberías de explicar mejor si tu intención es que alguien del foro te pueda ayudar? :-(

    Si desde el evento SelectedIndexChanged del control ComboBox estás llamando al procedimiento Filtro_Campo_Escribiendo_Clave, deberías de saber que desde éste se está llamando a su vez al procedimiento llamado Cargar_SQLite, al que le estás pasando la consulta SQL de selección y supuestamente la referencia de un control DataGridView llamado DGVDatosMaterial. Lo mismo es en el procedimiento Cargar_SQLite donde "salta" el error.

    Desde luego, todo esto se sale del Asunto de tu mensaje, ya que deseabas conocer cómo bloquear (inhabilitar) un control ComboBox según un dato seleccionado, y creo que la solución está más que dada.

    Si ahora tienes problemas con el error 'Referencia a objeto no establecida como instancia de un objeto.', lo correcto es que cierres esta conversación e inicies una nueva pregunta para el problema del error.

    Eso sí, te aconsejo que expliques con todo detalle el problema y dónde se produce, verificando si el valor de la variable que lo desencadena es o no Nothing. Si es Nothing, tienes que saber que esa variable no la puedes utilizar, porque de hacerlo, ya conoces el mensaje de error que obtendrás.

    Tienes que averiguar el motivo de que su valor sea Nothing y no el de una referencia válida al objeto que deseas utilizar.


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    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, 26 de junio de 2018 21:25
    Moderador

Todas las respuestas

  • "Darwin123456" preguntó:

    > ... deseo bloquear un combobox segun el dato que seleccione cabe señalar que el
    > combobox esta lleno con datos de una tabla de mi base de datos algun consejo o
    > ejemplode como podria realizer algo asi

    Hola:

    En primer lugar, ¿qué debo entender exactamente por "bloquear un combobox"? ¿Quizás establecer a False el valor de su propiedad Enabled?

    Si la respuesta es afirmativa, en principio te diría que utilices el evento SelectedIndexChanged del control ComboBox para verificar si el elemento actualmente seleccionado se corresponde con aquel que cumple la condición para inhabilitar el control ComboBox, tal y como muestra el siguiente ejemplo:

        Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
    
            ' Recuperar el valor del elemento seleccionado.
            '
            Dim value As Object = ComboBox1.SelectedValue
    
            If (Not TypeOf value Is DataRowView) Then
    
                ' Inhabilitar el control ComboBox si el valor
                ' es diferente a 'Pepe Quesada', sin hacer
                ' distinción entre mayúsculas y minúsculas.
                '
                If (value.ToString().Equals("pepe quesada", StringComparison.OrdinalIgnoreCase)) Then
                    ComboBox1.Enabled = False
                End If
            End If
    
        End Sub

    Como escribes que "el combobox esta lleno con datos de una tabla de mi base de datos", digo yo que estará enlazado a un objeto DataTable, el cual le has asignado a la propiedad DataSource del control ComboBox, estableciendo igualmente el valor de las propiedades DisplayMember y ValueMember a un nombre de campo existente en dicho objeto DataTable.

    Te lo comento porque en el ejemplo que te he indicado se hace uso de la propiedad SelectedValue para recuperar el valor del elemento que se ha seleccionado en el control ComboBox.

    Por último te comento, que una vez que el control ComboBox esté inhabilitado (Enabled = False), tendrás que buscar otro sitio de tu formulario para poder habilitarlo (Enabled = True), porque si el control está inhabilitado, espero que no pretendas habilitarlo desde su evento SelectedIndexChanged.

    Ahora bien, podrías hacerlo desde el evento SelectedIndexChanged SIEMPRE Y CUANDO desde otro lugar diferente establezcas un valor diferente a la propiedad SelectedValue del control ComboBox1. Por ejemplo, desde el evento Click de un control Button podrías ejecutar:

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
           ' Asignamos un nuevo valor a la propiedad SelectedValue, lo
           ' que hará que se desencadene el evento SelectedIndexChanged 
           ' del control ComboBox.
           '
           ComboBox1.SelectedValue = "luis delgado"
    
        End Sub
    

    Y el evento SelectedIndexChanged se quedaría como sigue:

       Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
    
            ' Recuperar el valor del elemento seleccionado.
            '
            Dim value As Object = ComboBox1.SelectedValue
    
            If (Not TypeOf value Is DataRowView) Then
    
                ' Habilitar/inhabilitar el control ComboBox si el valor
                ' es igual o diferente a 'Pepe Quesada'.
                '
                ComboBox1.Enabled = (Not value.ToString().Equals("pepe quesada", StringComparison.OrdinalIgnoreCase))
    
            End If
    
        End Sub

    De igual manera, también se desencadenaría el evento SelectedIndexChanged si modificas el valor de la propiedad SelectedIndex del control ComboBox:

        ' Seleccionar el elemento número 35. Recuerda que
        ' los índices de los elementos están en base cero.
        '
        ComboBox1.SelectedIndex = 34

    En fin, que tienes alternativas para habilitar de nuevo el control ComboBox. ;-)

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    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, 26 de junio de 2018 15:54
    Moderador
  • Gracias por el aporte lo que deseo es bloquear un Segundo combobox si el primero selecciona por ejemplo "pepe Quesada " pero con tu ejemplo me tira error . Gracias por tu ayuda

    mi combobox esta  conectado con una tabla  con un  dataset

    Me.FamiliaTableAdapter.Fill(Me.Subsea7DataSet6.Familia)

    martes, 26 de junio de 2018 17:35
  • "Darwin123456" escribió:

    > ... lo que deseo es bloquear un Segundo combobox si el primero selecciona por ejemplo "pepe Quesada "

    Leyendo de nuevo tu pregunta inicial, en ningún sitio se menciona en el mensaje si deseas bloquear un Segundo, Tercero, Cuarto o Veinticinco ComboBox; te limitas a escribir únicamente, "deseo bloquear un combobox". Como bien creo que podrás comprender, ignoro si tu control se llama ComboBox1, ComboBox2 o ComboBox25. Yo me ha limitado a ponerte un ejemplo, y eres tú el que LO TIENES QUE ADAPTAR A TUS NECESIDADES.

    Si eso mismo lo hubieras dicho desde un primer momento, igual ya tendrías el asunto resuelto, ya que es MUY IMPORTANTE que se escriban todas las circunstancias que se presentan desde el principio y no después de que alguien haya respondido. :-(

    Si en el primer ComboBox se selecciona por ejemplo "pepe Quesada" la solución no puede ser más sencilla, ya que tan solo tienes que sustituir ComboBox1 por el nombre del control ComboBox que deseas habilitar/inhabilitar:

      Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
    
            ' Recuperar el valor del elemento seleccionado en el primer control ComboBox.
            '
            Dim value As Object = ComboBox1.SelectedValue
    
            If (Not TypeOf value Is DataRowView) Then
    
                ' Habilitar/inhabilitar el segundo control ComboBox si el valor
                ' es igual o diferente a 'Pepe Quesada'.
                '
                SegundoControlComboBox.Enabled = (Not value.ToString().Equals("pepe quesada", StringComparison.OrdinalIgnoreCase))
    
            End If
    
        End Sub

    > ... pero con tu ejemplo me tira error ...

    ¡Vamos a ver! El error te lo tirará a ti, porque a mí no me tira ningún error, que por cierto, tampoco hubiera estado de más que hubieses escrito la descripción del error que obtienes, ¿o das por hecho que tengo yo que saber el error que obtienes? :-((


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    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, 26 de junio de 2018 17:50
    Moderador
  • Object reference not set to an instance of an object.

    Ese error me sale y no me explico

    martes, 26 de junio de 2018 18:27
  • "Darwin123456" escribió:

    > Object reference not set to an instance of an object.

    En español, ese error significa 'Referencia a objeto no establecida como instancia de un objeto.'. Es decir, que estás haciendo referencia a un objeto del cual aún no tienes creada una instancia válida, o lo que es lo mismo, que el valor de la variable que estás utilizando es Nothing.

    > Ese error me sale y no me explico

    Pues si tú no te lo explicas, menos me lo voy a explicar yo, porque por la "cantidad de código que has publicado en tu mensaje", yo al menos soy incapaz de saber o averiguar el motivo de que obtengas dicho mensaje de error.

    Desde luego, con el código que he publicado en mi primera respuesta es IMPOSIBLE que obtengas dicho mensaje de error, salvo que el valor de la variable llamada ComboBox1 sea Nothing, cosa que entiendo es poco probable. Pero con cosas más raras me he encontrado en el tiempo que llevo participando en foros y grupos. ;-)


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    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, 26 de junio de 2018 18:38
    Moderador
  • Sub Filtro_Campo_Escribiendo_Clave()
            Dim sql As String = "Select * from Material where Clave Like '%" & TxtBuscarMaterial.Text & "%'"
            Cargar_SQLite(sql, DGVDatosMaterial)
        End Sub

    sobre el evento  SelectedIndexChanged(sender As Object, e As EventArgs) Handles 
          realizo una busqueda , solo inserto la function de busqueda quizas eso esta causando conflict


       
    martes, 26 de junio de 2018 21:12
  • "Darwin123456" escribió:

    > Sub Filtro_Campo_Escribiendo_Clave()
    >    Dim sql As String = "Select * from Material where Clave Like '%" & TxtBuscarMaterial.Text & "%'"
    >    Cargar_SQLite(sql, DGVDatosMaterial)
    > End Sub
    >
    > sobre el evento SelectedIndexChanged(sender As Object, e As EventArgs) Handles
    > realizo una busqueda , solo inserto la function de busqueda quizas eso esta causando conflict

    ¿No crees que te deberías de explicar mejor si tu intención es que alguien del foro te pueda ayudar? :-(

    Si desde el evento SelectedIndexChanged del control ComboBox estás llamando al procedimiento Filtro_Campo_Escribiendo_Clave, deberías de saber que desde éste se está llamando a su vez al procedimiento llamado Cargar_SQLite, al que le estás pasando la consulta SQL de selección y supuestamente la referencia de un control DataGridView llamado DGVDatosMaterial. Lo mismo es en el procedimiento Cargar_SQLite donde "salta" el error.

    Desde luego, todo esto se sale del Asunto de tu mensaje, ya que deseabas conocer cómo bloquear (inhabilitar) un control ComboBox según un dato seleccionado, y creo que la solución está más que dada.

    Si ahora tienes problemas con el error 'Referencia a objeto no establecida como instancia de un objeto.', lo correcto es que cierres esta conversación e inicies una nueva pregunta para el problema del error.

    Eso sí, te aconsejo que expliques con todo detalle el problema y dónde se produce, verificando si el valor de la variable que lo desencadena es o no Nothing. Si es Nothing, tienes que saber que esa variable no la puedes utilizar, porque de hacerlo, ya conoces el mensaje de error que obtendrás.

    Tienes que averiguar el motivo de que su valor sea Nothing y no el de una referencia válida al objeto que deseas utilizar.


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    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, 26 de junio de 2018 21:25
    Moderador
  • Buenas a todos necesito un consulta una ayuda les explico  tengo un :

    combobox1

    combobox2

    Si en el combobox1 selecciono de un listado digamos Pedro se bloquee el combobox2

    el combobox1 esta lleno con una tabla de Base de datos :

    Me.FamiliaTableAdapter.Fill(Me.Subsea7DataSet6.Familia)


    y lo cargo con un -1 para que el combobox este en blanco hasta no seleccionar un datos

    Cbocombobox1.SelectedIndex = -1

     

     

    miércoles, 27 de junio de 2018 17:39