今、会社で開発してるシステムでコンボボックスで補完できたらなと思って色々調べて実装しました。相変わらずの個人メモです。
' オーダ補完入力用
Private Sub CmbBox_Order3_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) _
Handles CmbBox_Order3.KeyUp
Dim sTypedText As String
Dim iFoundIndex As Integer
Dim oFoundItem As Object
Dim sFoundText As String
Dim sAppendText As String
' オートコンプリートしないキーを設定
Select Case e.KeyCode
Case Keys.Back, Keys.Left, Keys.Right, Keys.Up, Keys.Delete, Keys.Down, Keys.Tab
Return
End Select
' 入力文字からコンボ内のコレクションを検索
sTypedText = CmbBox_Order3.Text
iFoundIndex = CmbBox_Order3.FindString(sTypedText)
' コレクション内に見つかったらオートコンプリート
If iFoundIndex >= 0 Then
oFoundItem = CmbBox_Order3.Items(iFoundIndex)
sFoundText = CmbBox_Order3.GetItemText(oFoundItem)
sAppendText = sFoundText.Substring(sTypedText.Length)
CmbBox_Order3.Text = sTypedText & sAppendText
' オートコンプリート部を選択状態にする
CmbBox_Order3.SelectionStart = sTypedText.Length
CmbBox_Order3.SelectionLength = sAppendText.Length
End If
End Sub
' オーダ補完入力用
Private Sub CmbBox_Order3_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) _
Handles CmbBox_Order3.KeyUp
Dim sTypedText As String
Dim iFoundIndex As Integer
Dim oFoundItem As Object
Dim sFoundText As String
Dim sAppendText As String
' オートコンプリートしないキーを設定
Select Case e.KeyCode
Case Keys.Back, Keys.Left, Keys.Right, Keys.Up, Keys.Delete, Keys.Down, Keys.Tab
Return
End Select
' 入力文字からコンボ内のコレクションを検索
sTypedText = CmbBox_Order3.Text
iFoundIndex = CmbBox_Order3.FindString(sTypedText)
' コレクション内に見つかったらオートコンプリート
If iFoundIndex >= 0 Then
oFoundItem = CmbBox_Order3.Items(iFoundIndex)
sFoundText = CmbBox_Order3.GetItemText(oFoundItem)
sAppendText = sFoundText.Substring(sTypedText.Length)
CmbBox_Order3.Text = sTypedText & sAppendText
' オートコンプリート部を選択状態にする
CmbBox_Order3.SelectionStart = sTypedText.Length
CmbBox_Order3.SelectionLength = sAppendText.Length
End If
End Sub