Autor Tema: BUSCAR EN COMBOBOX PROPIEDAD DE SOLO LECTURA  (Leído 2267 veces)

0 Usuarios y 1 Visitante están viendo este tema.

k_arlytos

  • Megabyte
  • ***
  • Mensajes: 210
  • Reputación: +2/-4
    • Ver Perfil
BUSCAR EN COMBOBOX PROPIEDAD DE SOLO LECTURA
« en: Abril 11, 2016, 05:20:04 pm »
HOLA ESTE METODO ME AYUDA A BUSCAR EN UN COMBOBOX CON LA PROPIEDAD DE SOLO LECTURA,

SI EN EL COMBOBOX TENGO ESTOS ITEM.

"1 - NUMERO UNO"
"2 - NUMERO DOS"
"3 - NUMERO TRES"
"4 - NUMERO CUATRO"

ESTE METODO ME AYUDA A BUSCAR EL INDICE EN EL QUE SE ENCUENTRE LA PALABRA QUE YO ESTOY BUSCANDO POR EJEMPLO

Call buscarComboBox(ControlCombobox, "1")
esto hace que el combo se posicione en el indice que se ubica la letra "1"

Sub buscarComboBox(ByRef ctControlCombo As ComboBox, ByVal texto As String)
    Dim ret As Long: ret = SendMessage(ctControlCombo.hwnd, CB_FINDSTRING, -1, ByVal texto)
    If ret <> -1 Then
        ctControlCombo.ListIndex = ret
    End If
End Sub

el problema que tengo es que yo no quiero que lea de izquierda a derecha sino de derecha a izquierda
algo asi como esto
Call buscarComboBox(ControlCombobox, "TRES")
ENTONCES QUE EL COMBOBOX SE POSICIONE EN EL INDICE 2
"Comentar el código es como limpiar el cuarto de baño; nadie quiere hacerlo, pero el resultado es siempre una experiencia más agradable para uno mismo y sus invitados"

Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Re:BUSCAR EN COMBOBOX PROPIEDAD DE SOLO LECTURA
« Respuesta #1 en: Abril 12, 2016, 02:16:49 pm »
Hola.
No conozco ninguna instrucción que lo haga en una sola línea, tal como lo hace la que sugerís. Seguramente quienes dominan el VB la conozcan y se pueda hacer más rápidamente.
Lo que se me ocurre es un loop por los elementos del combo y verificar si el texto que se busca se encuentra a la derecha de cada item.
Código: (VB) [Seleccionar]
Dim Indice As Integer
Dim i As Integer
For i = 0 to Combo1.Listcount - 1
    If Right$(Combo1.List(i), Len(Texto)) = Texto then
        Indice = i
        Exit For
    End If
Next
Habría que controlar que el largo de la cadena a buscar sea igual o inferior al largo del elemento del combo.
Jerónimo
« última modificación: Abril 12, 2016, 02:19:15 pm por Jeronimo »

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:BUSCAR EN COMBOBOX PROPIEDAD DE SOLO LECTURA
« Respuesta #2 en: Abril 13, 2016, 03:06:40 pm »
Código: (VB) [Seleccionar]
Sub BUSCAR_INDEX(xTexto As String)
   
    num = 0
   
    For i = 0 To Combo1.ListCount - 1
       
        Combo1.ListIndex = Val(i)
       
        If Trim(Combo1.Text) = xTexto Then
            num = i
        End If
               
    Next i
   
    Combo1.ListIndex = Val(num)
   
End Sub

Código: (VB) [Seleccionar]
Private Sub Command1_Click()
    Call BUSCAR_INDEX("TRES")
End Sub

Código: (VB) [Seleccionar]
Private Sub Form_Load()
   
    Combo1.AddItem "UNO"
    Combo1.AddItem "DOS"
    Combo1.AddItem "TRES"
    Combo1.AddItem "CUATRO"
    Combo1.AddItem "CINCO"
   
End Sub
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:BUSCAR EN COMBOBOX PROPIEDAD DE SOLO LECTURA
« Respuesta #3 en: Abril 13, 2016, 04:09:58 pm »
Formateando un poquito el codigo del procedimiento:

Código: (VB) [Seleccionar]
Sub BUSCAR_INDEX(xTexto As String)
    For i = 0 To Combo1.ListCount - 1
        Combo1.ListIndex = Val(i)
        If Trim(Combo1.Text) = xTexto Then Exit For
    Next i
End Sub

No es necesario volver a asignar Val(i) porque ya se hizo y ya se encontro, solo hay que salir.

Abrazos
Me encuentras en YAcosta.com

Albertomi

  • Gigabyte
  • ****
  • Mensajes: 281
  • Reputación: +153/-0
    • Ver Perfil
Re:BUSCAR EN COMBOBOX PROPIEDAD DE SOLO LECTURA
« Respuesta #4 en: Abril 13, 2016, 05:24:55 pm »
Estimado k_arlytos


Propongo otra alternativa, con la que podrás buscar por una palabra indistintamente en que posición se encuentra, ten en consideración que va retornar la primera coincidencia que se encuentra si es que tuvieras el caso de items que repitan el texto de busqueda

Código: (VB) [Seleccionar]
Private Sub Form_Load()
  With Combo1
    .AddItem "1 - NUMERO UNO"
    .AddItem "2 - DOS NUMEROS"
    .AddItem "3 - NUMERO TRES"
    .AddItem "4 - NUMERO CUATRO"
    .AddItem "5 - CINCO NUMEROS"
    .ListIndex = 0
  End With
End Sub


Código: (VB) [Seleccionar]
Private Sub Command1_Click()
  Combo1.ListIndex = SearchInCombo(Combo1, Text1.Text)
End Sub

Código: (VB) [Seleccionar]
Public Function SearchInCombo(ByVal ComboBox As VB.ComboBox, ByVal TextToFind As String) As Long
  Dim lngIndexNum As Long

  For lngIndexNum = 0 To ComboBox.ListCount - 1
    If InStr(1, ComboBox.List(lngIndexNum), UCase(Trim(TextToFind))) > 0 Then
      SearchInCombo = lngIndexNum
      Exit Function
    End If
  Next
End Function


Saludos, desde algún lugar de Lima-Perú
« última modificación: Abril 13, 2016, 06:31:57 pm por YAcosta »
Saludos, desde algún lugar de Lima-Perú

k_arlytos

  • Megabyte
  • ***
  • Mensajes: 210
  • Reputación: +2/-4
    • Ver Perfil
Re:BUSCAR EN COMBOBOX PROPIEDAD DE SOLO LECTURA
« Respuesta #5 en: Abril 13, 2016, 06:27:28 pm »
muchas gracias por su ayuda muchachos, pero no se puede alterar esa api para que haga la busqueda de derecha a izquierda?
"Comentar el código es como limpiar el cuarto de baño; nadie quiere hacerlo, pero el resultado es siempre una experiencia más agradable para uno mismo y sus invitados"

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:BUSCAR EN COMBOBOX PROPIEDAD DE SOLO LECTURA
« Respuesta #6 en: Abril 14, 2016, 11:46:31 am »
Espectacular esta ese codigo Albertomi.

No es lo que buscas K_arlitos? por que a mi me busca de izq  /der
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo