Ver Mensaje Individual
  #3 (permalink)  
Antiguo 30/09/2009, 10:01
7xtr3am
 
Fecha de Ingreso: marzo-2009
Mensajes: 73
Antigüedad: 15 años, 8 meses
Puntos: 1
Respuesta: lograr efecto google search box

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