Tengo un formulario de 15 combox en Visual Basic y quiero unificarlos en un mismo código.

Hola expertos tengo un formulario con casi 15 combox, y para cada uno necesito pegar el siguiente código. El problema es que en cada combo necesito pegar el código.. Y se me hace demasiado extenso y engorroso, existe la posibilidad de crear solo una función que me relaciones los 15 combobox,, y luego desde cada uno la voy llamando
Private Sub Combo1_KeyPress(KeyAscii As Integer)
Dim resp As Integer
'Si se presionó enter cierra la lista
If KeyAscii = 13 Then
SendMessageLong Combo1.hwnd, &H14F, False, 0
Else
'Si no siempre la lista desplegada
SendMessageLong Combo1.hwnd, &H14F, True, 0
End If
End Sub
Private Sub Combo2_KeyPress(KeyAscii As Integer)
Dim resp As Integer
'Si se presionó enter cierra la lista
If KeyAscii = 13 Then
SendMessageLong Combo2.hwnd, &H14F, False, 0
Else
'Si no siempre la lista desplegada
SendMessageLong Combo2.hwnd, &H14F, True, 0
End If
End Sub
Private Sub Combo3_KeyPress(KeyAscii As Integer)
Dim resp As Integer
'Si se presionó enter cierra la lista
If KeyAscii = 13 Then
SendMessageLong Combo3.hwnd, &H14F, False, 0
Else
'Si no siempre la lista desplegada
SendMessageLong Combo3.hwnd, &H14F, True, 0
End If
End Sub
Existe la posibilidad

1 respuesta

Respuesta
1
La solución a tu problema es sencilla. Debes crear una matriz de combobox, esto se hace poniéndole a todos los combo el mismo nombre e ir variando la propiedad index del control (por defecto viene vacía)
El código quedaría de la siguiente forma asumiendo el nombre "Combo1"
Private Sub Combo1_KeyPress(Index As Integer, KeyAscii As Integer)
  Dim resp As Integer
  'Si se presionó enter cierra la lista
  If KeyAscii = 13 Then
    SendMessageLong Combo1(Index).hwnd, &H14F, False, 0
  Else
    'Si no siempre la lista desplegada
    SendMessageLong Combo1(Index).hwnd, &H14F, True, 0
  End If
End Sub

Espero te sea útil.
Nota: Ten en cuenta que cada evento tendrá la propiedad index, con ella discriminas qué combo es el que ha ejecutado el evento.
Solo a modo de comentario, esto se podría reducir aún más de la siguiente forma:
Private Sub Combo1_KeyPress(Index As Integer, KeyAscii As Integer) 
    SendMessageLong Combo1(Index).hwnd, &H14F, (KeyAscii <> 13) , 0 
End Sub
________
Gracias por la pronta respuesta,, la inquietud que me queda ahora es que hay un combo que es el principal que de acuerdo a esta, me carga la información en el resto de combos,, entonces como tenia combos de 1 hasta combo 14, pues sencillamente relacionaba el comobo que necesitaba... si creo la matriz de combos,, como hago para relacionar estos combos.
Por ejemplo si el combo1 escojo laboratorios
entonces en el combo2, combo3, combo4, combo5, combo6,, cargaría los tipos de laboratorio,,
ahora si tengo en el combo1 laboratorios,, y tengo la matriz de combos como me quedaría en este caso.. Gracias
Me imagino que estás relacionando los combos por su listIndex. Osea, si laboratorios está en el listIndex=0, todos los demás combos quedan con su listIndex=0.
De ser así, lo que debes hacer es, en el evento click de la matriz agregar lo siguiente:
    If Index = 0 Then 'Si se hizo cllic en el combo1(0)
        'Recorrer la matriz seleccionando el listindex correspondiente
        For i = 1 To Me.Combo1.Count - 1
            Me.Combo1(i).ListIndex = Me.Combo1(0).ListIndex
        Next
    End If

Si quieres que pase con la selección de cualquiera de los combo, el código es el siguiente
        'Recorrer la matriz seleccionando el listindex correspondiente
        For i = 0 To Me.Combo1.Count - 1
            Me.Combo1(i).ListIndex = Me.Combo1(index).ListIndex
        Next

Si los relacionas de una forma distinta, dime cómo lo haces y veremos que se puede lograr.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas