通过枚举使用常数集进行工作

枚举类型提供了方便的方法处理有关的常数和使名称与常数数值相关联。例如,可以为与星期日期相关联的一组整数常数声明一个枚举类型,然后在代码中使用星期的名称而不使用其整数数值。

枚举可以通过在标准模块或公用类模块中的声明部分用 Enum 语句声明一个枚举类型来创建。枚举类型可以用适当的关键字声明为 Private 或 Public,例如:

Private Enum MyEnum

-或-

Public Enum MyEnum

在缺省情况下,在枚举中的第一个常数被初始化为 0,其后的常数则初始化为比其前面的常数大 1 的数值。例如在下面的枚举 Days 中,包含了一个数值为 0 的常数 Sunday,数值为 1 的常数 Monday,数值为 2 的常数 Tuesday 等等。

Public Enum Days
   Sunday
   Monday
   Tuesday
   Wednesday
   Thursday
   Friday
   Saturday
End Enum

提示 Visual Basic 提供了内置的枚举 vbDayOfWeek,包括了与星期的七天相对应的常数。如希望查阅预定义的枚举常数,在代码窗口键入 vbDayOfWeek,后跟一个句号,Visual Basic 将自动显示该枚举常数的内容。

可以使用赋值语句显式地给枚举中的常数赋值。可以赋值为任何长整数,包括负数。例如,可能希望常数数值小于 0 以便代表出错条件。

在以下的枚举中,常数 Invalid 被显式地赋值 –1,而常数 Sunday 被赋值 0。因为 Saturday 是枚举中的第一个元素,所以也被赋值 0。Monday 的数值为 1(比Sunday 的数值大 1),Tuesday 的数值为 2 等等。

Public Enum WorkDays
   Saturday
   Sunday = 0
   Monday
   Tuesday
   Wednesday
   Thursday
   Friday
   Invalid = -1
End Enum

注意 Visual Basic 将枚举中的常数数值看作长整数。如果将一个浮点数值赋给一个枚举中的常数,Visual Basic 会将该数值取整为最接近的长整数。

通过将相关的常数集组织进枚举类型中,就可以在不同的上下文环境中使用同一个常数名称。例如,可以使用在枚举 Days 和 WorkDays 中的同一个代表星期日期的名称。

当引用单个常数时,为了避免模糊引用,应在常数名称前冠以枚举名。下列代码引用 Days 和 WorkDays 枚举中的 Saturday 常数,并在立即窗口中显示它们的不同的数值。

Debug.Print "Days.Saturday = " & Days.Saturday
Debug.Print "WorkDays.Saturday = " & WorkDays.Saturday

当向一个枚举中的常数赋值时,也可以使用另一个枚举中的常数的数值。例如,下述 WorkDays 枚举的声明与前述的声明是等同的。

Public Enum WorkDays
   Sunday = 0
   Monday
   Tuesday
   Wednesday
   Thursday
   Friday
   Saturday = Days.Saturday - 6
   Invalid = -1
End Enum

声明枚举类型后,就可以声明该枚举类型的变量,然后使用该变量存储枚举常数的数值。下列代码使用 WorkDays 类型的变量存储与 WorkDays 枚举中的常数相关联的整数数值。

Dim MyDay As WorkDays
MyDay = Saturday         'Saturday 的数值为 0If MyDay < Monday Then   'Monday 的数值为 1'所以 Visual Basic 显示一个消息框。
   MsgBox "It's the weekend. Invalid work day!"
End If

注意,当在代码窗口中键入示例中的第二行代码时,Visual Basic 自动在“自动列出成员”列表中显示 WorkDays 枚举的常数。

图 8.7 Visual Basic 自动显示枚举的常数

因为常数 Sunday 的数值也为 0,所以如果在示例中的第二行用“星期日”替换“星期六”,Visual Basic 也将显示消息框。

MyDay = Sunday         'Sunday 的数值也为 0

注意 尽管通常只将枚举常数数值赋给枚举类型的变量,但也可以将任何长整数数值赋给该变量。当对与枚举常数不相关联的变量赋值时,Visual Basic 不会产生错误。

详细信息 请参阅“Enum 语句”。同时请参阅《部件工具指南》的“创建 ActiveX 部件”中的“给部件提供命名的常数”,该书在专业版和企业版中都有提供。