Programación General > Visual Basic 6.0 e inferiores
ComboBox
(1/1)
sergiocg:
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:
--- 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
--- Fin de la cita ---
En VB hay 2 maneras, la primera es ignorarlo... con lo que sólo se hacen acciones si tiene texto:
--- Código: Visual Basic --- If Text1.text <> "" then ' código end if 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 --- If Text1.text ="" then exit function ' o sub si es una subrutina y no una función
--- 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.
--- Fin de la cita ---
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 ---Private Sub Command1_Click() Select Case (Combo1.list(combo1.listindex)) Case 0 MsgBox ("Cobre") Case 1 MsgBox ("Aluminio") End SelectEnd Sub 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 --- dim Texto as string Texto = combo1.List(combo1.Listindex) msgbox Texto Texto = Combo1.Text msgbox Texto 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 --- ' para probarlo correctamente desde la interfaz pulsa por ejemplo en 'jueves'Private Sub Command1_Click() Dim Texto As String Texto = Combo1.List(Combo1.ListIndex) MsgBox Texto Texto = Combo1.Text MsgBox Texto Combo1.Text = "Hola que tal" ' aquí automáticamente cambia el listindex a -1 MsgBox Combo1.ListIndex Texto = Combo1.List(Combo1.ListIndex) MsgBox TextoEnd Sub 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.
sergiocg:
Vaya explicación, increible. Gracias.
¿Pero habría alguna manera de trabajar con los índices del Combo y no con los textos?
Navegación
Ir a la versión completa