VB.NET(.NET Framework 2.0)のコンボボックスの自動補完動作に問題があります。VB.NET Combobox - 数値の自動補完動作
は私が数値値を入力するコンボボックスを使用していて、そのドロップダウンリストは、可能な数値値を提案します。このリストは昇順にソートされます。たとえば、{"10"、 "92"、 "9000"、 "9001"}です。
コンボボックスのプロパティを次のように設定されています。
- AutoCompleteMode:SuggestAppend
- AutoCompleteSource:リストアイテム
- DropDownStyle:ドロップダウン
- ソート:偽
ドロップダウンリストは、単にあります次のように入力します。
- 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。
ただ、好奇心から、他の答えは歓迎される:)
ありがとうbendataclear。それは確かに進行する方法です。しかし、項目のリストが大きくなると遅くなります。 1つは、コンボボックスに入力されたテキストに応じて、可能なすべてのリストを構築するためにハッシュマップを使用することができ、そのたびにリスト全体を通過することを避けることができます。もっと簡単な方法が見つからないことは驚くべきことです...私はあなたの解決策を質問に追加しました。 – DevelBD
回答に追加しました – bendataclear
それは動作します。文字列はカスタムクラスにラップする必要があります。そうでなければ、文字列の長さだけがDataGridViewによって表示されます(http://stackoverflow.com/questions/479329/how-to-bind-a-string-list-to-aを参照)。 -datagrid)。 10kアイテムではうまく動作し、パソコンでは100kアイテムではかなり高速です。ありがとう! – DevelBD