Como mencionas, cuando decidí hacer este efecto también pensé que sería fácil, pero no sé si ya es porque me enrede mucho que no me sale del todo bien. A continuación pongo mi código(o uno de ejemplo) (atención mi intención al publicar mi código no es que hagan el trabajo por mí, simplemente es para motivos de ilustración). A primera instancia funciona bien, pero después de usarlo un rato se ve que no.
alomejor lo complique de mas :S no se
Código:
Public Class Form1
Dim rdn As New Random
Dim afecta As Boolean
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
AddHandler ComboBox1.GotFocus, AddressOf desp
AddHandler ComboBox1.LostFocus, AddressOf ocul
End Sub
Private Sub desp(ByVal s As Object, ByVal e As EventArgs)
ComboBox1.DroppedDown = True
End Sub
Private Sub ocul(ByVal s As Object, ByVal e As EventArgs)
ComboBox1.DroppedDown = False
End Sub
Private Sub llena()
'esta funcion simula una consulta a la base de datos
ComboBox1.Items.Clear()
Dim i As Integer = rdn.Next(3, 10)
Dim j
For j = 0 To i
Dim s As String = ""
Dim len As Integer = rdn.Next(5, 20)
Dim k
For k = 0 To len
s += Chr(rdn.Next(0, 20) + 97).ToString
Next
ComboBox1.Items.Add(s)
Next
End Sub
Private Sub ComboBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles ComboBox1.KeyDown
If e.KeyCode = Keys.Down OrElse e.KeyCode = Keys.Up Then
afecta = False
Else
afecta = True
End If
End Sub
Private Sub ComboBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.TextChanged
If ComboBox1.Text.Length > 3 Then
Dim ini As Integer = ComboBox1.SelectionStart
llena()
ComboBox1.SelectionLength = 0
ComboBox1.SelectionStart = ini
Else
Dim ini As Integer = ComboBox1.SelectionStart
ComboBox1.Items.Clear()
ComboBox1.SelectionStart = ini
End If
End Sub
End Class