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 EnumEn 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 EnumEn 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 EnumLos 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 EnumPara 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 IfLa 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 EnumDe 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