none
Eliminar item de un combo box basado en el item seleccionado de otro combo box RRS feed

  • Pregunta

  • Primero que nada, les agradezco de antemano por la ayuda

    Ahora si entrando en tema, necesito saber, como hacer que un item seleccionado, en por ejemplo, "combox1", ya no se despliegue en "combobox2", y a su vez los items seleccionados en el 1 y 2, ya no se desplieguen en "combobox3"

    Public Class Form1
        Public nacion() As String = {"Britanico", "Sueco", "Aleman", "Ingles", "Noruego"}
        Public color() As String = {"Blanco", "Amarillo", "Rojo", "Verde", "Azul"}
        Public bebida() As String = {"Agua", "Cafe", "Té", "Leche", "Cerveza"}
        Public cigarro() As String = {"Pall Mall", "Blends", "Prince", "Dunhill", "Bluemasters"}
        Public mascota() As String = {"Pez", "Gato", "Perro", "Caballo", "Pajaro"}
        Public obj As Object
        Public col As Integer
        Public arr As Object
       

        Private Sub llenado()
            cmbcol1.Items.AddRange(arr)
        End Sub

        Private Sub limpiado()
            obj.Items.Clear
        End Sub

        Private Sub cmbcol1_GotFocus(sender As Object, e As EventArgs) Handles cmbcol1.GotFocus
            arr = color
            obj = cmbcol1
            limpiado()
            llenado()
        End Sub

        Private Sub cmbcol2_GotFocus(sender As Object, e As EventArgs) Handles cmbcol2.GotFocus
            arr = color
            obj = cmbcol2
            limpiado()
            llenado()
        End Sub

        Private Sub cmbcol3_GotFocus(sender As Object, e As EventArgs) Handles cmbcol3.GotFocus
            arr = color
            obj = cmbcol3
            limpiado()
            llenado()
        End Sub

        Private Sub cmbcol4_GotFocus(sender As Object, e As EventArgs) Handles cmbcol4.GotFocus
            arr = color
            obj = cmbcol4
            limpiado()
            llenado()
        End Sub

        Private Sub cmbcol5_GotFocus(sender As Object, e As EventArgs) Handles cmbcol5.GotFocus
            arr = color
            obj = cmbcol5
            limpiado()
            llenado()
        End Sub

    End Class

    Para ser mas precioso, que si en "cmbcasa1" elijo "rojo", en los de mas ya no se muestre ese Item al menos que cambie, y si a su vez en "cmbcasa2" elijo "azul", tanto "rojo" como "azul" no de muestren en los de mas, pero de una forma compacta sin usar tantas lineas de codigo, porque lo he hecho con "if" y con "select case" pero son muchas lineas de codigo.

       
    • Editado EsTiGmA lunes, 28 de octubre de 2019 8:14
    martes, 15 de octubre de 2019 3:40

Todas las respuestas

  • Puedes hacer algo parecido a esto:

        Sub llenar(ByVal fila As Integer, ByVal obj As Object)
            columna = 0
            While columna < 5
                Dim Seleccionados As New List(Of ComboBox) From {cmbcasa1, cmbcasa2, cmbcasa3, cmbcasa4, cmbcasa5}

                Dim EstaSeleccionado As Boolean = False

                For nCombo As Integer = 0 To 4
                    If Not Seleccionados(nCombo).Focused Then

                        For n As Integer = 1 To 5
                            If n <> nCombo Then
                                If llenado(fila, columna).ToUpper = Seleccionados(nCombo).Text.ToUpper Then
                                    EstaSeleccionado = True  ' El elemetno está seleccionado en otro combo
                                End If
                            End If
                        Next
                    End If
                Next

                If Not EstaSeleccionado Then
                    obj.Items.Add(llenado(fila, columna))
                End If
                columna += 1
            End While
        End Sub

    Y puedes trabajar con un único módulo para manejar el evento GotFocus de los 5 combos:

        Private Sub cmbcasa1_GotFocus(sender As Object, e As EventArgs) Handles cmbcasa1.GotFocus, cmbcasa2.GotFocus, cmbcasa3.GotFocus, cmbcasa4.GotFocus, cmbcasa5.GotFocus

            objeto = sender
            limpia(objeto)
            a = 0
            llenar(a, objeto)

        End Sub


    Saludos, Javier J

    • Propuesto como respuesta Pablo Rubio martes, 15 de octubre de 2019 15:01
    martes, 15 de octubre de 2019 9:45