none
Buscar en combo tanto si escriber Mayusculas o minusculas RRS feed

  • Pregunta

  • Hola no consigo hacer que me busque en un comobox tanto si escribo mayusculas como minusculas 

    Ej: Si escribo "ipa" tiene que aparecer en el desplegable del combobox American IPA 

    Private Sub ComboBox3_TextChanged(sender As Object, e As EventArgs) Handles ComboBox3.TextChanged
            Try
                Dim Documentoxml As XmlDocument
                Dim nodelist As XmlNodeList
                Dim node As XmlNode
                Documentoxml = New XmlDocument
                Documentoxml.Load("Datos/Estilos.xml")
                nodelist = Documentoxml.SelectNodes("AchtCervezas/styles/style")
                For Each node In nodelist
                         Dim name = node.ChildNodes(0).InnerText
                                   If name.Contains(ComboBox3.Text).ToString Then
                        ComboBox3.Items.Add(name)
                    End If
                                Next           
            Catch ex As Exception
                MsgBox(ex.ToString())
    
            End Try
    
        End Sub

    • Cambiado Enrique M. Montejo lunes, 20 de julio de 2015 6:12 Pregunta relacionada con controles de Windows Forms.
    martes, 14 de julio de 2015 6:47

Respuestas

  • Puedes hacer la comparación con IndexOf:

    If name.IndexOf(ComboBox3.Text, StringComparison.OrdinalIgnoreCase) >= 0 Then
      ComboBox3.Items.Add(name)
    End If
    


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta JETET sábado, 25 de julio de 2015 5:43
    martes, 14 de julio de 2015 6:55
  • Cierto no es buena idea utilizar ListItems y cargar elementos en TextChanged, sorry.

    Creo que la mejor opción es que usaras el AutoCompleteCustomSource. Prueba con este código en tu Form_Load:

        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            ComboBox3.AutoCompleteCustomSource.Clear()
            Try
                Dim Documentoxml As XmlDocument
                Dim nodelist As XmlNodeList
                Dim node As XmlNode
                Documentoxml = New XmlDocument
                Documentoxml.Load("Datos/Estilos.xml")
                nodelist = Documentoxml.SelectNodes("AchtCervezas/styles/style")
                For Each node In nodelist
                    ComboBox3.AutoCompleteCustomSource.Add(node.InnerText)
                Next
            Catch ex As Exception
                MsgBox(ex.ToString())
    
            End Try
            ComboBox3.AutoCompleteMode = AutoCompleteMode.SuggestAppend
            ComboBox3.AutoCompleteSource = AutoCompleteSource.CustomSource
        End Sub


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta JETET sábado, 25 de julio de 2015 5:43
    martes, 14 de julio de 2015 7:34
  • ¿Qué significa "nada de nada"?

    ¿No te funciona el autocompletar? ¿No te carga los ítems? ¿Te da algún error?


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta JETET sábado, 25 de julio de 2015 5:43
    martes, 14 de julio de 2015 8:45
  • Vale, no estaba entendiendo lo que tratabas de hacer.

    El problema de las propiedades de autocompletar tanto del TextBox como del ComboBox es que únicamente muestran elementos que empiecen por el texto introducido.

    Si quieres proporcionar sugerencias con otro criterio (como que contenga el texto introducido) te recomendaría crear tu propio control que implementa la lógica que desees.

    Aquí puedes encontrar un ejemplo de cómo hacerlo. El ejemplo es con un TextBox si necesitas que sea un ComboBox el desarrollo sería muy similar:

    Windows Forms. TextBox con sugerencias


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta JETET sábado, 25 de julio de 2015 5:43
    martes, 14 de julio de 2015 9:27
  • Cierto, error mío.

    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta JETET sábado, 25 de julio de 2015 5:44
    martes, 14 de julio de 2015 9:40
  •  Si el metodo que pusiste originalmente, te funciona bien cuando es mayuscula / mayuscula o minuscula / minuscula, entonces podrias simplemente pasar todo a minuscula para comparar....

     Private Sub ComboBox3_TextChanged(sender As Object, e As EventArgs) Handles ComboBox3.TextChanged
            Try
                Dim Documentoxml As XmlDocument
                Dim nodelist As XmlNodeList
                Dim node As XmlNode
                Dim name As String
                Documentoxml = New XmlDocument
                Documentoxml.Load("Datos/Estilos.xml")
                nodelist = Documentoxml.SelectNodes("AchtCervezas/styles/style")
                For Each node In nodelist
                    name = node.ChildNodes(0).InnerText().ToLower
                    If name.Contains(ComboBox3.Text.ToLower) Then
                        ComboBox3.Items.Add(name)
                    End If
                Next
            Catch ex As Exception
                MsgBox(ex.ToString())

            End Try

        End Sub


    Saludos, Lucas Petruzzella

    • Marcado como respuesta JETET sábado, 25 de julio de 2015 5:44
    martes, 14 de julio de 2015 15:59
  • mira copié tu xml en un archivo y pude agregar sin problemas... te dejo el codigo y el xml para que lo revises...

    XML (agregue los tags de cierre que le faltaban:  </styles></AchtCervezas>)
    ----------------------------------------------- <?xml version="1.0" encoding="utf-8"?>
    <AchtCervezas>
      <styles>
        <style>
          <name>American Amber Ale</name>
          <OG_Min>1.045</OG_Min>
          <OG_Max>1.060</OG_Max>
          <FG_Min>1.010</FG_Min>
          <FG_Max>1.015</FG_Max>
          <IBU_Min>25</IBU_Min>
          <IBU_Max>40</IBU_Max>
          <Colour_Min>10</Colour_Min>
          <Colour_Max>17</Colour_Max>
          <ABV_Min>4.5</ABV_Min>
          <ABV_Max>6.0</ABV_Max>
        </style>
       </styles>
    </AchtCervezas>
    -
    --------------------------------------------- 

    CODIGO

    --------------------------------

     Private Sub ComboBox3_TextChanged(sender As System.Object, e As System.EventArgs) Handles ComboBox3.TextChanged
            Try
                Dim Documentoxml As XmlDocument
                Dim nodelist As XmlNodeList
                Dim node As XmlNode
                Dim name As String
                Documentoxml = New XmlDocument
                Documentoxml.Load("C:\Users\Lpetruzzella\Downloads\prueba.xml") 'Yo guarde el xml en descargas para probar...
                nodelist = Documentoxml.SelectNodes("AchtCervezas/styles/style")
                ComboBox3.Items.Clear()
                For Each node In nodelist
                    name = node.ChildNodes(0).InnerText().ToLower
                    If name.Contains(ComboBox3.Text.ToLower) Then
                        ComboBox3.Items.Add(name)
                    End If
                Next
            Catch ex As Exception
                MsgBox(ex.ToString())
    
            End Try
        End Sub

    ----------------------------------------



    Saludos,
    Lucas Petruzzella


    • Editado Lucas Petruzzella miércoles, 15 de julio de 2015 15:51
    • Propuesto como respuesta Karen Malagón jueves, 16 de julio de 2015 21:48
    • Marcado como respuesta JETET sábado, 25 de julio de 2015 5:44
    miércoles, 15 de julio de 2015 15:51
  • eso es porque el evento se encuentra en el textchanged y seleccionar una opcion lo toma como cambio de texto también... podrías probar planteandolo de otra manera como la siguiente....

     Private Sub ComboBox3_KeyDown(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles ComboBox3.KeyDown
            Try
                Dim Documentoxml As XmlDocument
                Dim nodelist As XmlNodeList
                Dim node As XmlNode
                Dim name As String
                Dim largoTexto As Integer = ComboBox3.Text.Length
                Dim texto As String = ComboBox3.Text
                Documentoxml = New XmlDocument
                Documentoxml.Load("C:\Users\Lpetruzzella\Downloads\prueba.xml") 'Yo guarde el xml en descargas para probar...
                nodelist = Documentoxml.SelectNodes("AchtCervezas/styles/style")
                ComboBox3.Items.Clear()
    
                For Each node In nodelist
                    name = node.ChildNodes(0).InnerText().ToLower
                    If name.Contains(ComboBox3.Text.ToLower) Then
                        ComboBox3.Items.Add(name)
                    End If
                Next
                ComboBox3.Text = texto
                ComboBox3.Select(largoTexto, 0)
            Catch ex As Exception
                MsgBox(ex.ToString())
    
            End Try
        End Sub


    Saludos,
    Lucas Petruzzella

    • Marcado como respuesta JETET sábado, 25 de julio de 2015 5:44
    martes, 21 de julio de 2015 11:47
  • If name.Contains(ComboBox3.Text).ToString

    a esto hazle el equivale a un UPPER, no uso winforms, pero me suena logico.


    Si mi respuesta fue útil ayudame marcándola como correcta.

    • Marcado como respuesta JETET sábado, 25 de julio de 2015 5:44
    martes, 21 de julio de 2015 16:01

Todas las respuestas

  • Puedes hacer la comparación con IndexOf:

    If name.IndexOf(ComboBox3.Text, StringComparison.OrdinalIgnoreCase) >= 0 Then
      ComboBox3.Items.Add(name)
    End If
    


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta JETET sábado, 25 de julio de 2015 5:43
    martes, 14 de julio de 2015 6:55
  • si me reconoce mayusculas y minusculas pero no me hace el que contenga 

    tengo activado 

    Autocompletemode =SuggestAppend

    AutocompleteSource = FileSystem

    martes, 14 de julio de 2015 6:56
  • Prueba a establecer AutocompleteSource a ListItems

    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    martes, 14 de julio de 2015 7:17
  • asier ques es lo q hace, no me añade nada a la lista despegable del combobox 

    gracias por contestar

    martes, 14 de julio de 2015 7:18
  • Cierto no es buena idea utilizar ListItems y cargar elementos en TextChanged, sorry.

    Creo que la mejor opción es que usaras el AutoCompleteCustomSource. Prueba con este código en tu Form_Load:

        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            ComboBox3.AutoCompleteCustomSource.Clear()
            Try
                Dim Documentoxml As XmlDocument
                Dim nodelist As XmlNodeList
                Dim node As XmlNode
                Documentoxml = New XmlDocument
                Documentoxml.Load("Datos/Estilos.xml")
                nodelist = Documentoxml.SelectNodes("AchtCervezas/styles/style")
                For Each node In nodelist
                    ComboBox3.AutoCompleteCustomSource.Add(node.InnerText)
                Next
            Catch ex As Exception
                MsgBox(ex.ToString())
    
            End Try
            ComboBox3.AutoCompleteMode = AutoCompleteMode.SuggestAppend
            ComboBox3.AutoCompleteSource = AutoCompleteSource.CustomSource
        End Sub


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta JETET sábado, 25 de julio de 2015 5:43
    martes, 14 de julio de 2015 7:34
  • nada de nada 
    martes, 14 de julio de 2015 8:27
  • ¿Qué significa "nada de nada"?

    ¿No te funciona el autocompletar? ¿No te carga los ítems? ¿Te da algún error?


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta JETET sábado, 25 de julio de 2015 5:43
    martes, 14 de julio de 2015 8:45
  • me cargan los items pero igual y con numeros detras

    tendria que cargas todas las cervezas que contenga la palabra ipa tanto mayusculas como minusculas

    yo empieso a escribir i y me cargan las que empiezan por i pero si ya sigo escribiendo ip para completar ipa ya no sale ninguna y si termino la palabra ipa tampoco

    martes, 14 de julio de 2015 9:20
  • solo carga 1 si escribo i me aparece el 1º que empieza por i 

    imperial IPA1.0751.0901.0101.020601208157.510.0

    eso es lo que aparece solo eso cuando escribo i i tendria que aparecer muchisimas cervezas

    martes, 14 de julio de 2015 9:25
  • Vale, no estaba entendiendo lo que tratabas de hacer.

    El problema de las propiedades de autocompletar tanto del TextBox como del ComboBox es que únicamente muestran elementos que empiecen por el texto introducido.

    Si quieres proporcionar sugerencias con otro criterio (como que contenga el texto introducido) te recomendaría crear tu propio control que implementa la lógica que desees.

    Aquí puedes encontrar un ejemplo de cómo hacerlo. El ejemplo es con un TextBox si necesitas que sea un ComboBox el desarrollo sería muy similar:

    Windows Forms. TextBox con sugerencias


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta JETET sábado, 25 de julio de 2015 5:43
    martes, 14 de julio de 2015 9:27
  • lo de los numeros por hay que poner esta parte de esta manera 

    ComboBox3.AutoCompleteCustomSource.Add(node.ChildNodes(0).InnerText)

    martes, 14 de julio de 2015 9:29
  • Cierto, error mío.

    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta JETET sábado, 25 de julio de 2015 5:44
    martes, 14 de julio de 2015 9:40
  •  Si el metodo que pusiste originalmente, te funciona bien cuando es mayuscula / mayuscula o minuscula / minuscula, entonces podrias simplemente pasar todo a minuscula para comparar....

     Private Sub ComboBox3_TextChanged(sender As Object, e As EventArgs) Handles ComboBox3.TextChanged
            Try
                Dim Documentoxml As XmlDocument
                Dim nodelist As XmlNodeList
                Dim node As XmlNode
                Dim name As String
                Documentoxml = New XmlDocument
                Documentoxml.Load("Datos/Estilos.xml")
                nodelist = Documentoxml.SelectNodes("AchtCervezas/styles/style")
                For Each node In nodelist
                    name = node.ChildNodes(0).InnerText().ToLower
                    If name.Contains(ComboBox3.Text.ToLower) Then
                        ComboBox3.Items.Add(name)
                    End If
                Next
            Catch ex As Exception
                MsgBox(ex.ToString())

            End Try

        End Sub


    Saludos, Lucas Petruzzella

    • Marcado como respuesta JETET sábado, 25 de julio de 2015 5:44
    martes, 14 de julio de 2015 15:59
  • No  Lucas Petruzzella no funcioa llevo todo el dia intentado hacerlo ejemplo

    American Pale Ale IPA

    Ingla Pale Ale IPA

    si escribo i O I me aparecen todas las cervezas que empiezan por i o I y no todas que contenga I o i

    si escribo ip no aparece nada y tendria que aparecer las que contenga la palabra IPA

    y si ya escribo ipa pues nada tambien

    gracias por responder


    miércoles, 15 de julio de 2015 6:15
  • Como te comentaba anteriormente la función de autocompletar de los controles ComboBox y TextBox es muy limitada, y se reduce a mostrar los elementos que empiezan por el texto introducido.

    En alguna ocasión me he encontrado con una necesidad similar y me he visto obligado a ir a un enfoque como el del artículo que te comentaba:

    Windows Forms. TextBox con sugerencias


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    miércoles, 15 de julio de 2015 6:21
  • Asier por fuersa tiene que tener el xml esta extroctura

    <NewDataSet>
      <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
        <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="Products" msdata:UseCurrentLocale="true">
          <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
              <xs:element name="Products">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="ProductID" type="xs:int" minOccurs="0" />
                    <xs:element name="Name" type="xs:string" minOccurs="0" />
                    <xs:element name="ProductNumber" type="xs:string" minOccurs="0" />
                    <xs:element name="Color" type="xs:string" minOccurs="0" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:choice>
          </xs:complexType>
        </xs:element>
      </xs:schema>

    puedo leer directamente de un xml sin crear ninguna tabla 

    <?xml version="1.0" encoding="utf-8"?>
    <AchtCervezas>
      <styles>
        <style>
          <name>American Amber Ale</name>
          <OG_Min>1.045</OG_Min>
          <OG_Max>1.060</OG_Max>
          <FG_Min>1.010</FG_Min>
          <FG_Max>1.015</FG_Max>
          <IBU_Min>25</IBU_Min>
          <IBU_Max>40</IBU_Max>
          <Colour_Min>10</Colour_Min>
          <Colour_Max>17</Colour_Max>
          <ABV_Min>4.5</ABV_Min>
          <ABV_Max>6.0</ABV_Max>
        </style>


    miércoles, 15 de julio de 2015 14:34
  • mira copié tu xml en un archivo y pude agregar sin problemas... te dejo el codigo y el xml para que lo revises...

    XML (agregue los tags de cierre que le faltaban:  </styles></AchtCervezas>)
    ----------------------------------------------- <?xml version="1.0" encoding="utf-8"?>
    <AchtCervezas>
      <styles>
        <style>
          <name>American Amber Ale</name>
          <OG_Min>1.045</OG_Min>
          <OG_Max>1.060</OG_Max>
          <FG_Min>1.010</FG_Min>
          <FG_Max>1.015</FG_Max>
          <IBU_Min>25</IBU_Min>
          <IBU_Max>40</IBU_Max>
          <Colour_Min>10</Colour_Min>
          <Colour_Max>17</Colour_Max>
          <ABV_Min>4.5</ABV_Min>
          <ABV_Max>6.0</ABV_Max>
        </style>
       </styles>
    </AchtCervezas>
    -
    --------------------------------------------- 

    CODIGO

    --------------------------------

     Private Sub ComboBox3_TextChanged(sender As System.Object, e As System.EventArgs) Handles ComboBox3.TextChanged
            Try
                Dim Documentoxml As XmlDocument
                Dim nodelist As XmlNodeList
                Dim node As XmlNode
                Dim name As String
                Documentoxml = New XmlDocument
                Documentoxml.Load("C:\Users\Lpetruzzella\Downloads\prueba.xml") 'Yo guarde el xml en descargas para probar...
                nodelist = Documentoxml.SelectNodes("AchtCervezas/styles/style")
                ComboBox3.Items.Clear()
                For Each node In nodelist
                    name = node.ChildNodes(0).InnerText().ToLower
                    If name.Contains(ComboBox3.Text.ToLower) Then
                        ComboBox3.Items.Add(name)
                    End If
                Next
            Catch ex As Exception
                MsgBox(ex.ToString())
    
            End Try
        End Sub

    ----------------------------------------



    Saludos,
    Lucas Petruzzella


    • Editado Lucas Petruzzella miércoles, 15 de julio de 2015 15:51
    • Propuesto como respuesta Karen Malagón jueves, 16 de julio de 2015 21:48
    • Marcado como respuesta JETET sábado, 25 de julio de 2015 5:44
    miércoles, 15 de julio de 2015 15:51
  • hola Lucas Petruzzella, lo primero gracias por responder lo segundo es que para que funcione tengo escribir la palabra del tiron es decir IPA no puedo teclear 1º i 2ºp 3ºa porque se borran segun voy escribiendo


    martes, 21 de julio de 2015 7:28
  • eso es porque el evento se encuentra en el textchanged y seleccionar una opcion lo toma como cambio de texto también... podrías probar planteandolo de otra manera como la siguiente....

     Private Sub ComboBox3_KeyDown(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles ComboBox3.KeyDown
            Try
                Dim Documentoxml As XmlDocument
                Dim nodelist As XmlNodeList
                Dim node As XmlNode
                Dim name As String
                Dim largoTexto As Integer = ComboBox3.Text.Length
                Dim texto As String = ComboBox3.Text
                Documentoxml = New XmlDocument
                Documentoxml.Load("C:\Users\Lpetruzzella\Downloads\prueba.xml") 'Yo guarde el xml en descargas para probar...
                nodelist = Documentoxml.SelectNodes("AchtCervezas/styles/style")
                ComboBox3.Items.Clear()
    
                For Each node In nodelist
                    name = node.ChildNodes(0).InnerText().ToLower
                    If name.Contains(ComboBox3.Text.ToLower) Then
                        ComboBox3.Items.Add(name)
                    End If
                Next
                ComboBox3.Text = texto
                ComboBox3.Select(largoTexto, 0)
            Catch ex As Exception
                MsgBox(ex.ToString())
    
            End Try
        End Sub


    Saludos,
    Lucas Petruzzella

    • Marcado como respuesta JETET sábado, 25 de julio de 2015 5:44
    martes, 21 de julio de 2015 11:47
  • If name.Contains(ComboBox3.Text).ToString

    a esto hazle el equivale a un UPPER, no uso winforms, pero me suena logico.


    Si mi respuesta fue útil ayudame marcándola como correcta.

    • Marcado como respuesta JETET sábado, 25 de julio de 2015 5:44
    martes, 21 de julio de 2015 16:01