У меня проблема с автоматическим заполнением списков в VB.NET (с .NET Framework 2.0).
Я использую комбинированный список для ввода числовых значенийи его список DropDown, предлагающий возможные числовые значения.Этот список отсортирован в порядке возрастания, например {"10", "92", "9000", "9001"}.
Свойства комбинированного списка установлены следующим образом:
- AutoCompleteMode: SuggestAppend
- AutoCompleteSource: ListItems
- DropDownStyle: DropDown
- Sorted: False
Список DropDown просто заполняется так:
- myCombobox.Items.Add ("10")
- myCombobox.Items.Add ("92")
- myCombobox.Items.Add ("9000")
- myCombobox.Items.Add ("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</p>
<pre><code> 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.
Просто из любопытства приветствуется любой другой ответ:)