• Jueves 18 de Abril de 2024, 13:04

Autor Tema:  ComboBox  (Leído 6804 veces)

sergiocg

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
ComboBox
« en: Lunes 14 de Junio de 2010, 09:55 »
0
He estado programando durante algún tiempo en C++ y ahora que he empezado con VisualBasic me van apareciendo las dudas. A ver si aguno me ayuda:

1) En C++ cuando queremos que un if no haga nada cuando un Text está vació escribimos if (Text1.Text ="") Then return; como se haría en Visual Basic.

2) Qué podriedad he de utilizar para usar un ComboBox con un Select Case. No sé como pasarle el índice de cada uno de los elementos del Combo para en función de lo seleccionado haga una cosa.

Private Sub Command1_Click()
Select Case (Combo1.ItemData)
Case 0
    MsgBox ("Cobre")
Case 1
    MsgBox ("Aluminio")
End Select
End Sub

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: ComboBox
« Respuesta #1 en: Lunes 14 de Junio de 2010, 13:53 »
0
Citar
En C++ cuando queremos que un if no haga nada cuando un Text está vació escribimos if (Text1.Text ="") Then return; como se haría en Visual Basic
En VB hay 2 maneras, la primera es ignorarlo... con lo que sólo se hacen acciones si tiene texto:
Código: Visual Basic
  1.  
  2.     If Text1.text <> "" then
  3.           ' código
  4.     end if
  5.  
  6.  
En el ejemplo se ve que si no hay texto no se ejecuta código.
Claro que puede darse el caso que tras ese código haya más código y sólo queramos que se llegue ahí si hay 'texto'. La solución es salir como en C con return, pero VB6 emplea su propia instrucción.
Código: Visual Basic
  1.  
  2.     If Text1.text ="" then exit function ' o sub si es una subrutina y no una función
  3.  
  4.  


Citar
Qué propiedad he de utilizar para usar un ComboBox con un Select Case. No sé como pasarle el índice de cada uno de los elementos del Combo para en función de lo seleccionado haga una cosa.
Listindex apunta al elemento actualmente seleccionado. Imagina una matriz, lisindex refiere al elemento actual.
 
Ahora bien para conocer el texto de un elemento cualquiera se usa la propiedad list. es como si tuvieramos una matriz llamada list
Combo1.List(23)  ' refiere el texto del elemento 23
Código: Visual Basic
  1. Private Sub Command1_Click()
  2.     Select Case (Combo1.list(combo1.listindex))
  3.          Case 0
  4.              MsgBox ("Cobre")
  5.         Case 1
  6.              MsgBox ("Aluminio")
  7.     End Select
  8. End Sub
  9.  
En un control combo a diferencia de un control lista, el valor del elemento seleccionado puede obtenerse directamente con la propiedad text:
Código: Visual Basic
  1.  
  2.      dim Texto as string
  3.  
  4.      Texto = combo1.List(combo1.Listindex)
  5.      msgbox Texto
  6.      Texto = Combo1.Text
  7.      msgbox Texto
  8.  
  9.  
Así, ambas líneas de código de asignación del texto son equivalentes. Pero ojo, esto no es recíprocamente cierto, es decir sólo es cierto cuando listindex es distinto de -1. Imagina que en el combo tenemos 7 elementos , los días de la semana, yo podría perfectamente hacer esto:
Código: Visual Basic
  1.  
  2.  
  3. ' para probarlo correctamente desde la interfaz pulsa por ejemplo en 'jueves'
  4. Private Sub Command1_Click()
  5.     Dim Texto As String
  6.      
  7.      Texto = Combo1.List(Combo1.ListIndex)
  8.           MsgBox Texto
  9.      Texto = Combo1.Text
  10.          MsgBox Texto
  11.      Combo1.Text = "Hola que tal"   ' aquí automáticamente cambia el listindex a -1
  12.           MsgBox Combo1.ListIndex
  13.      Texto = Combo1.List(Combo1.ListIndex)
  14.          MsgBox Texto
  15. End Sub
  16.  
  17.  
El msgbox 1 indicará 'Jueves', el 2º también, luego cambiamos el texto del combo, y automáticamente se cambia el listindex a -1 (incluso aunque el valor introducido exista en el combo), de hecho para verificarlo nos muestra listindex = -1 señal de que actualmente no hay elegido ninguno del combo (porque es eso lo que ha sucedido cuando hemos metido un valor directamente en el texto). Al final como ha cambiado el listindex a -1 (no itemseleccionado) entonces no hay texto para el elemento.

Si no queremos ese comportamiento debemos activar la propiedad 'Locked' del combobox, esto impide que el usuario introduzca texto en el combo, aunque por código nosotros todavía podremos cambiarlo. Por tanto es importante que sepas la diferencia entre usar: 'Combo1.Text' y  'Combo1.List(Combo1.ListIndex)' . Aunque oparecen lo mismo queda claro que no lo son. la 1ª expresión refleja el texto actualmente en el combo, la 2ª expresión refleja el contenido del elemento seleccionado, por eso la 1ª y la 2ª no necesariamente coincidirán.
«Ma non troppo»
----> ModoVacaciones = False<----

sergiocg

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: ComboBox
« Respuesta #2 en: Martes 15 de Junio de 2010, 12:56 »
0
Vaya explicación, increible. Gracias.

¿Pero habría alguna manera de trabajar con los índices del Combo y no con los textos?