Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Filtrando en ComboBox

Estas en el tema de Filtrando en ComboBox en el foro de Visual Basic clásico en Foros del Web. Hola amigos, necesito hacer el tipico caso de ir escribiendo letras y que me filtre el combobox las letras correspondientes.Lo he logrado hacer con una ...
  #1 (permalink)  
Antiguo 21/02/2005, 07:54
 
Fecha de Ingreso: noviembre-2003
Mensajes: 46
Antigüedad: 20 años, 6 meses
Puntos: 0
Filtrando en ComboBox

Hola amigos, necesito hacer el tipico caso de ir escribiendo letras y que me filtre el combobox las letras correspondientes.Lo he logrado hacer con una consulta por cada letra que va escribiendo pero cuando me carga el combo me queda sucia la pantalla con el despliegue anterior que era mas largo.
Otra cosa que quisiera resolver es que cuando voy escribiendo ab.... me va filtrando correctamente hasta ahi bien, lo que quisiera poder hacer es bajar con el cursor en la grilla que ahora mismo no me permite no se porque, ya que intento con el cursor bajar y me selecciona solo el primero y no me deja bajar mas a otro Item

les paso como lo estoy haciendo

Private Sub Cempresa_KeyUp(KeyCode As Integer, Shift As Integer)
a = Cempresa 'guardo lo que escribio
Set Temporal = DE.Agenda.Execute("SELECT CodEmpr, Nombre From TmpEmpresasTANGOyAGENDA WHERE (Nombre LIKE '" & Cempresa.Text & "%')")
If Temporal.RecordCount > 0 Then
Cempresa.Clear 'borro el contenido anterior aca es donde me queda sucia la pantalla con el despliegue que suele ser mas corto que el anterior
With Temporal
Do Until .EOF
Cempresa.AddItem !nombre
Cempresa.ItemData(Cempresa.NewIndex) = !CodEmpr
.MoveNext
Loop
Const CB_SHOWDROPDOWN = &H14F
tmp = SendMessage(Cempresa.hwnd, CB_SHOWDROPDOWN, 1, ByVal 0&)
End With
End If
Cempresa = a 'escribo lo que habia cargado
Cempresa.SelStart = Len(a) + 1 ' y me hubico
End Sub

si existe alguna sugerencia de como mejorar esto AGRADECIDO
  #2 (permalink)  
Antiguo 21/02/2005, 08:03
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 20 años, 4 meses
Puntos: 53
mira para mi sería mejor si usas un DataCombo para hacerlo el proceso es menos lento.. y mas facil de usar..

nos vemos.
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #3 (permalink)  
Antiguo 21/02/2005, 08:28
 
Fecha de Ingreso: noviembre-2003
Mensajes: 46
Antigüedad: 20 años, 6 meses
Puntos: 0
jamas use el datacombo, trabaja igual que el combobox ? si no en que cambia o me podrias pasar un ejemplo de como cargar esto que estoy intentando hacer, voy bien ?
  #4 (permalink)  
Antiguo 21/02/2005, 09:31
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 20 años, 4 meses
Puntos: 53
bueno colocas un Datacombo y colocas esto despues de tu sentencia.


Set DataCombo.DataSource = Temporal
Set DataCombo.RowSource = Temporal
DataCombo.BoundColumn = "CodEmpr"
DataCombo.ListField = "Nombre"

y de esta manera en atomatico tus resultados va a estar en el DataCombo.

nos vemos..
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #5 (permalink)  
Antiguo 21/02/2005, 13:35
 
Fecha de Ingreso: noviembre-2003
Mensajes: 46
Antigüedad: 20 años, 6 meses
Puntos: 0
si Geovanny eso esta claro lo que necesito es filtrar de acuerdo a las letras que va cargando el usuario, como puedo hacer filtrando con consultas como lo describi mas arriba y dando le la Opcion additem, ya que el datacombo no lo tiene, estoy trabajando con un DataEnvironment para conectarme, puede que trabaja con una consulta conectada con el DataCombo y recargar la consulta filtrando con los datos que me da el usuario pero de la forma con que estaba trabajano con el combo box me resulta mas practico. SI existe la posibilidad de recargar el Datacombo añadiendole los items de acuerdo a una consulta que realice dentro del evento Keyup del Control me podrias decier cual seria gracias ¡¡¡¡ y si no que modalidad me recomendas que use para cargar mi combo de acuerdo a las letras que se van agregando GRACIAS DE NUEVO ¡¡¡
  #6 (permalink)  
Antiguo 21/02/2005, 14:31
Avatar de vbx3m  
Fecha de Ingreso: febrero-2005
Ubicación: Venezuela
Mensajes: 524
Antigüedad: 19 años, 3 meses
Puntos: 1
Filtar

Este es una forma de filtrar un ComboBox revisalo a ver si te sirve

Option Explicit
Dim ComboBorrado As Boolean

Private Sub Combo_KeyDown(KeyCode As Integer)
If KeyCode = vbKeyDelete Then
ComboBorrado = True
Else
ComboBorrado = False
End If
End Sub

Private Sub Combo_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyBack Then
ComboBorrado = True
Else
ComboBorrado = False
End If
End Sub

Private Sub Combo_Change(ByVal Text As String, Combo As ComboBox)
Dim i As Integer, j As Integer
If Not ComboBorrado Then
j = Len(Text)
With Combo
For i = 0 To .ListCount - 1
If StrComp(Text, Left$(.List(i), j), 1) = 0 Then
.ListIndex = i
.Text = .List(.ListIndex)
.SelStart = j
.SelLength = Len(.Text) - .SelStart
Exit For
End If
Next
End With
End If
End Sub

Private Sub Combo1_Change()
Static valor As Boolean
On Local Error Resume Next
If Not valor Then
valor = True
Combo_Change Combo1.Text, Combo1
valor = False
End If
Err = 0
End Sub

Private Sub Combo1_KeyDown(KeyCode As Integer, Shift As Integer)
Combo_KeyDown KeyCode
End Sub

Private Sub Combo1_KeyPress(KeyAscii As Integer)
Combo_KeyPress KeyAscii
End Sub

Me dices si te sirvio...
  #7 (permalink)  
Antiguo 21/02/2005, 14:43
 
Fecha de Ingreso: noviembre-2003
Mensajes: 46
Antigüedad: 20 años, 6 meses
Puntos: 0
pero donde comparas con la letra ingresada, y donde filtras con la tabla los valores correspondientes ??
yo estoy probando asi filtrando con consultas y cargando una tabla Tmp y direccionando el DataCombo a esa tabla cada vez que filtro

If KeyCode = 13 Then
Ccategoria.SetFocus
End If
If KeyCode = 8 Then
Exit Sub
End If
a = cempresa1
'filtro por la letra que esta escribiendo
Set Temporal = DE.Agenda.Execute("SELECT CodEmpr, Nombre From TmpEmpresasTANGOyAGENDA WHERE (Nombre LIKE '" & a & "%')")
If Temporal.RecordCount > 0 Then
'Borro lo que tenga TmpEmpresa
DE.Agenda.Execute "DELETE FROM TmpEMPRESA"
Do Until Temporal.EOF
'cargo la tabla TmpEmpresa
DE.Agenda.Execute "INSERT INTO TmpeMPRESA (Nombre) VALUES ('" & Temporal!nombre & "')"
Temporal.MoveNext
Loop
Set cempresa1.RowSource = DE
cempresa1.RowMember = "Tmpempresa"
cempresa1.ListField = "nombre"
cempresa1.BoundColumn = "nombre"

'esto me funciona con un COmboBox pero no con este DataCombo porque no anda ??
Const CB_SHOWDROPDOWN = &H14F
tmp = SendMessage(cempresa1.hwnd, CB_SHOWDROPDOWN, 1, ByVal 0&)
Exit Sub
End If

ahora la cosa rara que pasa es que vuelve constantemente a la linea que tiene el Set Tempora = de.agenda.execute ..........

NO SE PORQUE ?????????? vuelve y vuelve y vuelve como un loop siendo que no hay loop que pasa ??? a la primera que filtro veo que me filtra., por ejemplo, con "ab" me filtra 3 Registros pero hace un loop y vuelve al filtro no se que pasa

Última edición por polielb; 21/02/2005 a las 14:44
  #8 (permalink)  
Antiguo 21/02/2005, 15:07
 
Fecha de Ingreso: noviembre-2003
Mensajes: 46
Antigüedad: 20 años, 6 meses
Puntos: 0
lo que estoy notando es que si cargo una cualquier letra por ejemplo una "a" en el combo entra infinidad de veces al evento

Private Sub cempresa1_KeyUp(KeyCode As Integer, Shift As Integer)

porque pasa esto, y no es que se queda precionada la tecla para nada jjajajaj por las dudas digo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:36.