Visual Basic - Nombres De Constantes

Life is soft - evento anual de software empresarial
   
Vista:

Nombres De Constantes

Publicado por Omar Lobo (2 intervenciones) el 09/12/2010 19:37:25
Sres. quiero resolver un tema, quizas muy simple y a la vista , pero como soy muy novato no ubico la respuesta. A ver, tengo un formulario con un combobox de items que son constantes declaradas publicas. Al ejecutar el programa, los textos mostrados en el combobox son los valores de las constantes y no los nombres de ella. Como solucionarlo?

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Nombres De Constantes

Publicado por pepe (20 intervenciones) el 09/12/2010 20:58:19
No es la primera vez que alguien confunde los textos o cadenas de caracteres con las etiquetas asignadas a constantes y variables. Permiteme que explique lo que es cada cosa antes de indicarte la solucion:

Textos o cadena de caracteres: Ya sean definidos como variables o constantes no son más que eso, textos almacenados en memoria en forma de caracteres (vease ASCII, Unicode).

En cambio las Etiquetas con las que nombramos a las variables o constantes, NO son textos, sino identificadores que el compilador asocia con posiciones de memoria donde estan almacenados los datos (textos o números). Estas etiquetas desaparecen cuando un programa se compila, y no existen dentro de un archivo ejecutable.

De esta manera es facil entender que cuando añades los items al combobox el valor que estás pasando a la funcion es el contenido de la constante, no su identificador.

Const pepe = 0

Añades el valor 0 (cero) el número almacenado en la posicion de memoria apuntada por el identificador pepe

Const Nombre = "pepe"

Añades el valor "pepe" que es la cadena de caracteres almacenada en la posicion de memoria apuntada por el identificador Nombre.

Espero que entiendas la diferencia y te ayude a resolver tu problema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Nombres De Constantes

Publicado por William Alexander (4 intervenciones) el 10/12/2010 04:35:13
Completamente de acuerdo con el comentario anterior. Pero no significa que no pueda hacerse.

Abajo te pego el codigo de un formulario con un combobox (Combo1) y un boton (Command1). El boton solo te muestra el valor seleccionado.
________________________________________________________________

Option Explicit
Option Base 1

Const MaxItems = 5

Dim Constantes(MaxItems) As Integer
Dim ConstantesNombre(MaxItems) As String

Private Sub Command1_Click()
Dim Valor As Integer

Valor = Constantes(Combo1.ListIndex + 1)
MsgBox "El valor seleccionado es: " & Valor, vbInformation + vbOKOnly, "Ejemplo"
End Sub

Private Sub Form_Load()

Dim i As Integer

'Initializing arrays...
Constantes(1) = 23: ConstantesNombre(1) = "Constante 1"
Constantes(2) = 41: ConstantesNombre(2) = "Constante 2"
Constantes(3) = 51: ConstantesNombre(3) = "Constante 3"
Constantes(4) = 25: ConstantesNombre(4) = "Constante 4"
Constantes(5) = 34: ConstantesNombre(5) = "Constante 5"

With Combo1
'.Style = vbComboDropdownList
For i = 1 To MaxItems Step 1
.AddItem ConstantesNombre(i)
Next i
.ListIndex = 0
End With

End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Nombres De Constantes

Publicado por pepe (20 intervenciones) el 10/12/2010 14:45:19
Siempre hay una manera para conseguir cualquier cosa que se nos ocurra hacer, es lo bueno de las computadoras y la programacion.

Pero esto no significa que todo lo que se nos ocurra sea bueno.

El código expuesto por William Alexander da una solucion al problema de Omar, pero Omar tiene un enfoque equivocado del uso de las constantes. Si el objetivo es rellenar el Combo1 podría hacerlo de la siguiente manera sin usar Variables redundantes.

Option Explicit
Option Base 1

Private Sub Command1_Click()

MsgBox Combo1.List(Combo1.ListIndex)

End Sub

Private Sub Form_Load()

Combo1.AddItem "Constante 1"
Combo1.ItemData(Combo1.ListCount - 1) = 23

Combo1.AddItem "Constante 2"
Combo1.ItemData(Combo1.ListCount - 1) = 41

Combo1.AddItem "Constante 3"
Combo1.ItemData(Combo1.ListCount - 1) = 51

Combo1.AddItem "Constante 4"
Combo1.ItemData(Combo1.ListCount - 1) = 25

Combo1.AddItem "Constante 5"
Combo1.ItemData(Combo1.ListCount - 1) = 34

Combo1.ListIndex = 0

End With

End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Nombres De Constantes

Publicado por William Alexander (4 intervenciones) el 10/12/2010 17:41:41
Excelente.

No tengo delante VB por eso una pregunta ¿al desplegar la lista, esta se muestra ordenada segun se fueron metiendo los items o segun el valor ItemData?

Desde ya gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Nombres De Constantes

Publicado por pepe (20 intervenciones) el 10/12/2010 19:29:08
En principio tal como los añades, aunque la función AddItem tiene un segundo parametro para el indice del elemento a añadir. Además cambiando la propiedad short del combobox se consigue ordenar automaticamente sin añadir código extra.

El valor de ItemData, que yo sepa, solo sirve para almacenar valores asociados al texto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Nombres De Constantes

Publicado por William Alexander (4 intervenciones) el 10/12/2010 19:56:00
Ok. Todo claro. Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Nombres De Constantes

Publicado por Omar Lobo (2 intervenciones) el 10/12/2010 22:00:03
MUchas Gracias por su dedicacion, fue mi primera pregunta en un foro de informatica y con las expecativas superadas , sera la primera de mil preguntas

chau
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar