visual una net mostrar insertar escribir enlazar datos con como buscar autocompletar agregar vb.net sorting autocomplete combobox

una - Combobox VB.NET-Comportamiento de autocompletado para valores numéricos



insertar datos en combobox vb net (1)

Parece ser un problema cuando el cuadro combinado muestra los datos, ya que incluso si configura una fuente personalizada, reordena en orden alfabético:

ComboBox1.Items.Add("10") ComboBox1.Items.Add("92") ComboBox1.Items.Add("9000") ComboBox1.Items.Add("9001") ComboBox1.AutoCompleteCustomSource.Add("10") ComboBox1.AutoCompleteCustomSource.Add("92") ComboBox1.AutoCompleteCustomSource.Add("9000") ComboBox1.AutoCompleteCustomSource.Add("9001") ComboBox1.AutoCompleteSource = AutoCompleteSource.CustomSource

Creo que la única forma en que puedo pensar es crear tu propio autocompletar algo así como (no probado):

Dim cbotxt As String = ComboBox1.Text Dim key As String key = ChrW(e.KeyCode) ListBox1.Items.Clear() For Each i In ComboBox1.Items Dim s As String = i.ToString() If s.StartsWith(ComboBox1.Text & key) Then ListBox1.Items.Add(s) End If Next If ListBox1.Items.Count > 0 Then ListBox1.Visible = True ComboBox1.Text = ListBox1.Items(0) End If

Editar:

Un buen enfoque para muchos elementos (estoy usando más de 10000 en una aplicación):

Primero cambie de un cuadro de lista a una vista de cuadrícula de datos. A continuación, declare una lista de cadenas y complete los valores que desea autocompletar

Dim Numberlist as List<Of String> '' Fill List using Numberlist.Add("String")

Luego, en la propiedad de cambio de texto:

Filter = NumberList.FindAll(AddressOf checkNum) DataGridView1.DataSource = Filter

Y agregue la función para verificar las cadenas.

Function checkNum(ByVal b As String) As Boolean If b.StartsWith(ComboBox1.Text) Then Return True Else Return False End If End Function

Este método se ejecuta en mi máquina con 10k elementos más rápido de lo que puedo escribir.

Tengo un problema con el comportamiento de autocompletar de los cuadros combinados en VB.NET (con .NET framework 2.0).

Estoy usando un cuadro combinado para escribir valores numéricos , y su lista desplegable para sugerir posibles valores numéricos . Esta lista está ordenada en orden ascendente, por ejemplo {"10", "92", "9000", "9001"}.

Las propiedades del cuadro combinado se establecen de la siguiente manera:

  • AutoCompleteMode: SuggestAppend
  • AutoCompleteSource: ListItems
  • DropDownStyle: DropDown
  • Ordenado: Falso

La lista DropDown simplemente se llena de esta manera:

  • myCombobox.Items.Add ("10")
  • myCombobox.Items.Add ("92")
  • myCombobox.Items.Add ("9000")
  • myCombobox.Items.Add ("9001")

Cuando no escribo nada, el orden de los valores de la lista DropDown es correcto, en orden original / ascendente. Sin embargo, cuando empiezo a escribir algo, los valores sugeridos en la lista DropDown se ordenan (alfanuméricamente): si escribo "9", la lista de sugerencias se convierte en {"9000", "9001", "92"}.

Me gustaría evitar que este comportamiento obtenga los valores de la lista en el orden original / ascendente. No puedo entender cómo ...

Una posible solución sería rellenar con ceros los valores de la lista, por ejemplo {"0010", "0092", "9000", "9001"}, pero me gustaría evitar esto.

Editar:

Como lo sugiere bendataclear, uno puede usar un cuadro de lista para mostrar las sugerencias. Esto funcionará para listas pequeñas pero no escala bien a listas grandes. Puede ser útil para algunas aplicaciones. Basado en el código proporcionado por bendataclear, lo hice funcionar de esta manera:

Private Sub ComboBox1_KeyUp(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles ComboBox1.KeyUp

Dim cursorPos As Integer = ComboBox1.SelectionStart ListBox1.Items.Clear() For Each s In ComboBox1.Items If s.StartsWith(ComboBox1.Text) Then ListBox1.Items.Add(s) End If Next If ListBox1.Items.Count > 0 And ComboBox1.Text.Length > 0 Then ComboBox1.Text = ListBox1.Items(0) ComboBox1.SelectionStart = cursorPos ComboBox1.SelectionLength = 0 End If End Sub

El código no se ha probado exhaustivamente y se puede mejorar, pero la idea principal está ahí.

Editar 2:

Usar DataGridView conduce a un mejor rendimiento; fue suficiente para mí. Gracias bendataclear.

Solo por curiosidad, cualquier otra respuesta es bienvenida :)