No se seleccionan elementos en el control ComboBox mientras escribe los primeros caracteres

Síntomas

Establezca la propiedad DropDownStyle del control ComboBox a DropDownListy, a continuación, escriba los primeros caracteres del elemento en el control ComboBox en tiempo de ejecución. El elemento que está seleccionado en el ComboBox no coincide con los caracteres que escriba. El elemento que está seleccionado en el ComboBox se basa en el último carácter que escriba. Por ejemplo, si los elementos en el control ComboBox son rojo, robley rosa, al escribir en el ComboBox ro , el enfoque está en roble en lugar de rosa.

Causa

Este problema se produce porque la búsqueda de ComboBox se basa en un carácter en lugar del conjunto de caracteres completa.

Solución alternativa

Para evitar este problema, agregue código que busca elementos con todos los caracteres que escriba en el cuadro combinado. El código también debe seleccionar el elemento que se ajuste a todos los caracteres. Para borrar el texto de búsqueda a intervalos regulares, utilice un control Timer . Para ello, siga estos pasos:
  1. En Microsoft Visual Studio .NET o Microsoft Visual Studio 2005, cree una nueva aplicación para Windows utilizando Visual Basic .NET de Visual Basic 2005 y Visual .NET C#.

    De forma predeterminada, se crea Form1.
  2. En el cuadro de herramientas, arrastre un temporizador a Form1.
  3. En la ventana Propiedades, establezca la propiedad Enableden True.
  4. Agregue la instrucción siguiente a la sección de declaración de variable del código:

    Visual Basic .NET o Visual Basic 2005
    Dim searchstr As String
    .NET Visual C#
    string searchstr;
  5. Agregue el código siguiente al evento Load de Form1:

    Visual Basic .NET o Visual Basic 2005
    'set the timer interval and start the timerTimer1.Interval = 1000
    Timer1.Start()
    .NET Visual C#
    //set the interval  and start the timertimer1.Interval =1000;
    timer1.Start();
  6. Agregue el código siguiente al evento Tick de Timer1:

    Visual Basic .NET o Visual Basic 2005
    'empty the string for every 1 secondssearchstr = ""
    .NET Visual C#
    //empty the string for every 1 secondssearchstr="";
  7. Agregue el código siguiente al evento KeyUp del ComboBox1:

    Visual Basic .NET o Visual Basic 2005
          searchstr = searchstr & Chr(e.KeyValue)      ' If the Search string is greater than 1 then use custom logic
    If searchstr.Length > 1 Then
    Dim index As Integer
    ' Search the Item that matches the string typed
    index = ComboBox1.FindString(searchstr)
    ' Select the Item in the Combo
    ComboBox1.SelectedIndex = index
    End If
    .NET Visual C#
             searchstr = searchstr + Convert.ToChar(e.KeyCode);         // If the Search string is greater than 1 then use custom logic
    if (searchstr.Length > 1)
    {
    int index;
    // Search the Item that matches the string typed
    index=comboBox1.FindString(searchstr);
    // Select the Item in the Combo
    comboBox1.SelectedIndex=index;
    }

Estado

Este comportamiento es por diseño.

Más información

Pasos para reproducir el comportamiento

  1. En Microsoft Visual Studio .NET o Microsoft Visual Studio 2005, cree una nueva aplicación para Windows utilizando Visual Basic .NET de Visual Basic 2005 y Visual .NET C#.

    De forma predeterminada, se crea Form1. Nota: Debe cambiar el código en Visual Basic 2005. De forma predeterminada, Visual Basic crea dos archivos para el proyecto cuando se crea un proyecto de formularios Windows Forms. Si el formulario se denomina Form1, los dos archivos que lo representan se denominan Form1.vb y Form1.Designer.vb. Usted escribe el código en el archivo Form1.vb. El Diseñador de Windows Forms escribe el código en el archivo Form1.Designer.vb. El Diseñador de Windows Forms utiliza la palabra clave partial para dividir la implementación de Form1 en dos archivos independientes. Este comportamiento evita que el código generado por el diseñador se mezcle con el código.

    Para obtener más información acerca de las nuevas mejoras del lenguaje Visual Basic 2005, visite el siguiente sitio Web de Microsoft Developer Network (MSDN):

    Para obtener más información sobre las clases parciales y el Diseñador de Windows Forms, visite el siguiente sitio Web de MSDN:

  2. En el cuadro de herramientas, arrastre un control ComboBox a Form1.
  3. Haga ComboBox1y, a continuación, haga clic en
    Propiedades.
  4. En la ventana Propiedades, haga clic en
    DropDownStyley, a continuación, establezca la propiedad en
    DropDownList.
  5. En la ventana Propiedades, haga clic en
    Elementosy, a continuación, haga clic en el botón de puntos suspensivos (...).
  6. En el Editor de la colección de cadenas, escriba
    rojo, roble, y
    rosa en líneas diferentes y, a continuación, haga clic en
    OK.
  7. En el menú Depurar , haga clic en
    Iniciar para ejecutar la aplicación.
  8. Escriba las ro ComboBox1.

Referencias

Para obtener más información, visite el siguiente sitio Web de MSDN:

Propiedad ComboBox.DropDownStyle
http://msdn2.microsoft.com/en-us/library/system.windows.forms.combobox.dropdownstyle(vs.71).aspx
Propiedades

Id. de artículo: 814362 - Última revisión: 17 ene. 2017 - Revisión: 1

Comentarios