Vb6 理解枚举的困难

Vb6 理解枚举的困难,vb6,enums,Vb6,Enums,如果表单不能有公共常量声明,为什么它可以有公共枚举块 如果我在表单的声明部分有一个公共变量 我可以在整个应用程序中引用它,但我必须使用点符号 e、 g form1.var1 但是,如果我在表单声明中放入一个枚举块,我可以引用它 在应用程序的其余部分,但只有在没有前缀的情况下 用点表示法 枚举块是表单上唯一可以或只能从外部引用而不使用点符号的结构吗 我缺少的逻辑是什么?这里的逻辑是枚举定义类型 您已经知道类型,因为您在任何地方都使用它们。类是一种类型。因此是一个整数、一个长、一个字符串,以及所有其

如果表单不能有公共常量声明,为什么它可以有公共枚举块

如果我在表单的声明部分有一个公共变量 我可以在整个应用程序中引用它,但我必须使用点符号 e、 g form1.var1

但是,如果我在表单声明中放入一个枚举块,我可以引用它 在应用程序的其余部分,但只有在没有前缀的情况下 用点表示法

枚举块是表单上唯一可以或只能从外部引用而不使用点符号的结构吗


我缺少的逻辑是什么?

这里的逻辑是枚举定义类型

您已经知道类型,因为您在任何地方都使用它们。类是一种类型。因此是一个
整数
、一个
、一个
字符串
,以及所有其他内置数据类型。您可以使用
Type
关键字创建用户定义的类型;e、 g

' Defines a new type User
Type User
    Name As String
    ID As Integer
    PhoneNumber As String
End Type
如果你仔细想想,你会发现这是有道理的。您从不直接使用枚举。相反,你用它作为一种类型。声明包含该枚举类型值的变量的方式与声明包含
Integer
String
类型值的变量的方式相同

相比之下,常数不是一种类型。它只是一个正则值,与声明正则变量没有什么不同,只是常量变量的值不能修改


类型可以在任何地方定义,在类内部或外部。但是,必须在类内部或模块内部定义变量。

此行为的原因是VB6由COM构成。大多数VB类型都基于COM类型库可用的类型(包含在所有VB组件和最通用的“ActiveX”组件中)。公共VB Enum语句相当于类型库中的“Enum”。但是,在类型库中,枚举是顶级对象(其他对象包括接口、协类、模块、记录、联合和别名)。这意味着VB以..的形式访问它们,并且此约定应用于内部创建的枚举类型。VB对象浏览器说Form1.MyEnum是误导性的,这只是说它在哪里声明


至于常数-不幸的是,这是VB6中的函数漏洞。COM类型库确实支持常量作为类型库模块的一部分,但VB6从未添加此功能(可能是因为VB没有类型库模块的概念)。

谢谢,这为我澄清了一些问题。将枚举视为一种类型,它只是long类型的一种变体,对于long类型,某些值具有第二个名称。是这样吗?它们可以以某种方式在表单中声明,这仍然“感觉”不太正确。表单或用户控件只是一种特殊的类。类需要能够声明公共枚举,以便它们可以用作属性、方法参数、方法返回值等的类型。@Bob77 Ah好的,谢谢。这对我现在来说是有道理的。出于兴趣,您是否知道枚举是否是唯一可以以不使用点表示法从外部引用的形式声明的结构?VB6允许您对公共枚举使用快捷语法。这意味着,只要它们在整个项目中是唯一的,就不需要用类的名称来限定它们。也就是说,您可以使用
Form1.Freddy
或只使用
Freddy
(假设
Freddy
是一个公共枚举)。不能对属性、方法或事件执行此操作。请注意,在表单中声明
Public X As Long
时,您已经声明了一个属性
Sub
函数
声明方法,可以是私有的,也可以是公共的。VB6远比人们所认为的更面向对象。人们可以使用
Feddy.EnumItem
EnumItem
,只要它是独特的项目/模块。感谢您提供的信息,我很想知道您在哪里学到这些东西!我想这是我自己解决的。然而,我的背景是从两本书中获得的:Bruce McKinney()的硬核Visual Basic和Matt Curland()的“高级Visual Basic 6”。