Visual Basic Foro

Programación => Visual Basic 6 => Mensaje iniciado por: seba123neo en Mayo 24, 2011, 06:32:19 pm

Título: Buscar por Tag en ComboboxEx
Publicado por: seba123neo en Mayo 24, 2011, 06:32:19 pm
Hola, tengo una consulta, estoy usando este control que la verdad esta muy bueno como siempre y le veo la utilidad de agregarle una propiedad que la verdad es muy util, les explico:

estoy cargando datos de una base de datos, registros con su respectivos ID y el nombre, lo estaba haciendo hoy en un control DataCombo que a traves de sus propiedades, puedo hacer que el ID me quede disponible para consultar en la propiedad BoundText de este...o sea si quiero posicionar el item en un DataCombo que tiene el ID 35, hago un DataCombo.BoundText = 35 y automaticamente lo posiciona ahi.

con este control la carga se hace bien, ya que cargo el ID en la propiedad TAG del item y al momento de consultarla lo hago con GetTagItem y esta todo bien, el problema es al querer posicionar un item a traves de su Tag, este control no la tiene, estaba viendo el codigo y veo que Leandro guarda los Tags en una coleccion no? quisiera hacer una simple propiedad que al darle el TAG como parametro me traiga el Index del item al cual pertenece, aviso que los Tag no se repiten nunca ya que son ID de una base de datos y son unicos. estaba viendo de hacer una busqueda en la coleccion, pero pregunto para ver si alguien sabe otra forma.

muchas gracias desde ya.

saludos.
Título: Re:Buscar por Tag en ComboboxEx
Publicado por: seba123neo en Mayo 24, 2011, 08:04:55 pm
bue, me hice esta funcion, no se si es optima pero zafa y cumple con lo que queria, si alguien encuentra una forma mas rapida o mejor...que la publique.

Código: [Seleccionar]
Public Function GetIndexByTag(ByVal Tag As String) As Long
    Dim vIndex As Long, i As Long
    vIndex = -1
    For i = 1 To cColl.Count
        If Tag = cColl(i) Then vIndex = i - 1: Exit For
    Next
    GetIndexByTag = vIndex
End Function

le paso el tag y me devuelve el indice de la coleccion que seria el indice del item en el combo.

saludos.
Título: Re:Buscar por Tag en ComboboxEx
Publicado por: LeandroA en Mayo 24, 2011, 08:29:38 pm
jaja bueno estaba por publicar y vi que las funciones son casi iguales

Código: [Seleccionar]
Public Function GetItemByTag(ByVal sTag As String) As Long
    Dim i As Long
    For i = 1 To cColl.Count
        If cColl.Item(i) = sTag Then
            GetItemByTag = i - 1
            Exit Function
        End If
    Next
    GetItemByTag = -1
End Function

y si es la unica forma, excepto  que cuando modifiques a la funcion AddItem y cuando agrega un item a la coleccion pongas como key  el tag y como valor el index luego para recuperarlo es como lo queres cColl(tag) es = index
Tambien hay una propiedad ItemData, pero es casi lo mismo que el tag, osea vas a estar en la misma.

Aclaro una cosa dentro de la funcion  ModifyItem

yo hacia esto
Código: [Seleccionar]
    If Tag <> vbNullChar Then
        'cColl.Item(Index) = Tag
    End If
lo cual esta mal porque no se puede modificar un elemento en una colecion (almenos eso creo)
asi que hay que cambiarlo por esto

Código: [Seleccionar]
    If Tag <> vbNullChar Then
        cColl.Remove Index + 1
        cColl.Add Tag, , Index + 1
    End If

Saludos.



Título: Re:Buscar por Tag en ComboboxEx
Publicado por: seba123neo en Mayo 24, 2011, 09:32:37 pm
 :) muchas gracias otra vez Leandro, voy a tener en cuenta eso, ya funciona todo bien che...

saludos.
Título: Re:Buscar por Tag en ComboboxEx
Publicado por: ssccaann43 en Mayo 26, 2011, 04:41:48 pm
Seba sera q compartes un ejemplito conmigo a ver q tal y a ver si lo implemento en mi soft?
Título: Re:Buscar por Tag en ComboboxEx
Publicado por: seba123neo en Mayo 28, 2011, 03:19:16 am
Seba sera q compartes un ejemplito conmigo a ver q tal y a ver si lo implemento en mi soft?

no hay problema, es re util esto ya que el datacombo es HORRIBLE y aparte este ComboboxEx tiene soporte para la rueda del mouse (cosa que con el datacaombo tenia que usar una clase que hookea el control para que ande el mouse) y aparte se le pueden poner iconos, regular la cantidad de items a mostrar, toma los temas de windows, es excelente, el datacombo no tenia nada de eso.

pero para ser perfecto le faltaba esta propiedad.

yo cargo de una base de datos el ID (que aca se almacena en el TAG) y el nombre.

por ejemplo, este sub carga los usuarios en el combo.

Código: [Seleccionar]
Private Sub CargarUsuarios()
    mRsAux.Open "SELECT id,nombre FROM usuarios", mConexion, adOpenStatic, adLockReadOnly, adCmdText
    Do Until mRsAux.EOF
        cboUsuario.AddItem , mRsAux("nombre"), mRsAux("id")
        mRsAux.MoveNext
    Loop
    mRsAux.Close
End Sub

fijate que el campo "id" lo pongo en el TAG del item.

Para "guardar" el ID del item seleccionado hago esto:

Código: [Seleccionar]
cboUsuario.GetItemTag(cboUsuario.SelectedItem)
eso me devuelve el ID del item seleccionado.

y para hacer lo contrario..o sea cargar desde la base un determinado ID y posicionarlo, hago esto:

primero cargas el combo con los registros como hice arriba, y despues lo posicionas asi:

Código: [Seleccionar]
cboUsuario.SelectedItem = cboUsuario.GetIndexByTag(rsDatos("id"))
GetIndexByTag es la nueva funcion que tenes que agregar al control, es la que puse arriba, o la de leandro, que te busca en la coleccion el TAG que en este caso es rsDatos("id") y te devuelve el indice para pasarselo a cboUsuario.SelectedItem, y entonces te lo posiciona automaticamente ahi.

saludos.
Título: Re:Buscar por Tag en ComboboxEx
Publicado por: YAcosta en Mayo 28, 2011, 04:54:42 am
Disculpen... donde puedo conseguir el ComboboxEx??? entiendo que podria usarlo en vez de DataCombo.

Gracias
Título: Re:Buscar por Tag en ComboboxEx
Publicado por: YAcosta en Mayo 28, 2011, 04:55:45 am
Sorry, ya lo encontré, voy a probarlo.