Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: k_arlytos 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
-
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.
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
-
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
Private Sub Command1_Click()
Call BUSCAR_INDEX("TRES")
End Sub
Private Sub Form_Load()
Combo1.AddItem "UNO"
Combo1.AddItem "DOS"
Combo1.AddItem "TRES"
Combo1.AddItem "CUATRO"
Combo1.AddItem "CINCO"
End Sub
-
Formateando un poquito el codigo del procedimiento:
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
-
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
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
Private Sub Command1_Click()
Combo1.ListIndex = SearchInCombo(Combo1, Text1.Text)
End Sub
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ú
-
muchas gracias por su ayuda muchachos, pero no se puede alterar esa api para que haga la busqueda de derecha a izquierda?
-
Espectacular esta ese codigo Albertomi.
No es lo que buscas K_arlitos? por que a mi me busca de izq /der