我在使用VB.NET(.NET框架2.0)中的组合框时,出现了自动完成行为的问题。
我正在使用组合框来输入数字值,并使用其下拉列表来建议可能的数字值。此列表按升序排序,例如{"10","92","9000","9001"}。
组合框属性设置如下:
- AutoCompleteMode:SuggestAppend
- AutoCompleteSource:ListItems
- DropDownStyle:DropDown
- Sorted:False
下拉列表只是这样填充的:
- myCombobox.Items.Add("10")
- myCombobox.Items.Add("92")
- myCombobox.Items.Add("9000")
- myCombobox.Items.Add("9001")
当我不输入任何内容时,下拉列表中的值顺序是正确的,按原始/升序排列。但是,当我开始输入时,下拉列表中建议的值被排序(按字母数字顺序):如果我键入“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。
仅出于好奇,欢迎提供其他答案 :)