У меня проблема с автоматическим заполнением полей со списком в VB.NET (с .NET framework 2.0).
Я использую поле со списком для ввода числовых значений и его список DropDown, чтобы предлагать возможные числовые значения. Этот список отсортирован в порядке возрастания, например {"10", "92", "9000", "9001"}.
Свойства поля со списком устанавливаются следующим образом:
Список DropDown просто заполняется следующим образом:
Когда я ничего не набираю, порядок значений в раскрывающемся списке правильный: исходный / возрастающий. Однако, когда я начинаю что-то вводить, предлагаемые значения в списке DropDown сортируются (буквенно-цифровыми): если я набираю «9», список предложений становится {«9000», «9001», «92»}.
Я хотел бы предотвратить такое поведение, чтобы получить значения списка в исходном / возрастающем порядке. Я не могу понять, как ...
Возможный обходной путь - дополнить нулями значения в списке, например {"0010", "0092", "9000", "9001"}, но я бы хотел избежать этого.
Изменить:
Как предлагает bendataclear, можно использовать список для отображения предложений. Это будет работать для небольших списков, но плохо масштабируется для больших списков. Это может быть полезно для некоторых приложений. На основе кода, предоставленного bendataclear, я заставил его работать следующим образом:
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
Код не был тщательно протестирован и может быть улучшен, но основная идея есть.
Редактировать 2:
Использование DataGridView приводит к повышению производительности; для меня этого было достаточно. Спасибо, bendataclear.
Просто из любопытства, любой другой ответ приветствуется :)