Los Trucos del Guille publicados en MSDN España

 

Lista de trucos publicados en MSDN España



Truco publicado con fecha 18/Jun/99

 

1.- Algunos consejos sobre las ENUMeraciones

Como sabrás, desde la versión 5.0 del Visual Basic, éste lenguaje acepta un tipo especial de constantes: las enumeraciones.
Para abreviar: las enunmeraciones son valores constantes que están relacionados, por ejemplo:

Enum eTricolor
    Azul
    Rojo
    Verde
End Enum

En este caso, la constante Azul tiene un valor cero, Rojo es igual a uno y Verde vale dos; ya que si no se le indica lo contrario, el primer valor que se asigna es cero y los restantes valores se van incrementando. Por ejemplo:

Enum eCuatricolor
    Negro
    Azul = 128
    Rojo
    Verde
End Enum

En este caso, Negro será igual a cero, Azul vale 128, Rojo es igual a 129 y Verde vale 130.
Todos los valores serán siempre numéricos de tipo LONG, es decir, que sólo aceptará números enteros que estén dentro del rango aceptado por ese tipo de datos.

Pero también se pueden asignar valores a cada una de las constantes:

Enum eValores
    Azul = &HFF0000
    Rojo = &HFF
    Verde = &HFF00
    Gris = &HF
End Enum

Los nombres de las constantes usadas en las enumeraciones no tienen las restricciones "habituales" de las variables y constantes, es decir que se pueden usar espacios en los nombres indicados... pero para que el Visual Basic no se confunda, estos nombres hay que indicarlos entre corchetes:

Enum eOtrosColores
    [Azul Claro]
    [Rosa Pálido]
    Amarillo
End Enum

Para asignarlos, también tendremos que usar los corchetes; de todas formas, el Visual Basic se encarga de hacerlo, como puedes comprobar en la siguiente imagen, Visual Basic nos muestra los valores posibles y si se selecciona uno de los nombres "especiales", el propio Visual Basic se encarga de incluirlo entre corchetes:

La ventaja de usar estos nombres es que, si ese tipo de datos se usa en una propiedad de un control de usuario, en la ventana de propiedades se mostrarán los nombres usados en la enumeración, con lo cual será más intuitivo y fácil de ver el valor que queremos asignar.

Como puedes comprobar esos valores se muestran por orden alfabético, no por el valor numérico de las constantes.

 

Conflicto de nombres

Igual que ocurre con los tipos definidos por el usuario y con las propiedades de las clases o controles de usuario, podemos usar el mismo nombre de constante en diferentes enumeraciones, pero... si se nos da el caso de que la misma constante enumerada está en diferentes declaraciones, el Visual Basic nos "avisará" de que no sabe cual de ellas usar... en esos casos se puede usar delante de la constante el nombre de la enumeración:

Dim tColor As eTricolor
' También se puede declarar de esta otra forma:
'Dim tColor As Long

tColor = eTricolor.Verde

If tColor <> eTricolor.Rojo Then
    Debug.Print "tColor es distinto de Rojo"
End If

La recomendación para que estos casos no se den, es usar nombres direntes... por norma se suele usar un prefijo delante del nombre de cada una de las constantes de una enumeración:

Public Enum eColoresBasicos
    ecbAzul
    ecbRojo
    ecbVerde
End Enum

 

Rangos de valores

La ventaja de las enumeraciones es que podemos declarar variables o propiedades e incluso parámetros que acepten valores enumerados, esto es, que el rango de valores "aceptables" por esa variable sea cualquiera de los declarados... aunque esto sólo sea una especie de "recomendación", ya que el Visual Basic no nos obliga a que el valor esté dentro ese rango, realmente el Visual Basic admitirá cualquier valor que sea del tipo LONG... Por tanto, es nuestra obligación comprobar que ese valor sea el adecuado, para ello, algunas veces es conveniente incluir en la declaración de esas constantes un valor mínimo y otro máximo, para que sea fácil comprobar el rango aceptado; pero, como ya he comentado, sólo es a título informativo, porque el valor aceptado puede ser cualquier valor LONG. Veamos un ejemplo de cómo podemos hacerlo:

Public Enum eColoresBasicos
    ecbPrimero
    ecbAzul = ecbPrimero
    ecbRojo
    ecbVerde
    ecbUltimo = ecbVerde
End Enum

De esta forma, podríamos recorrer todos los valores posibles o hacer una comprobación de que el valor asignado está dentro del rango:

For i = ecbPrimero To ecbUltimo


If i < ecbPrimero Or i > ecbUltimo Then

 

Parámetros enumerados opcionales

Si uno de los parámetros de un procedimiento acepta un valor de una enumeración y queremos que sea opcional, pero con un valor predeterminado, podemos hacerlo así:

Sub unColor(Optional ByVal queColor As eColoresBasicos = ecbAzul)

Cuando escribas el parámetro de este procedimiento, el Visual Basic te mostrará una lista con los valores aceptables:

Si quieres más información, puedes buscar "Enumeración" en la ayuda del Visual Basic o en los CDs de la MSDN Library que acompaña al Visual Basic 6.0

 


la Luna del Guille o... el Guille que está en la Luna... tanto monta...