
正文
vb.net枚举模块 net 枚举
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
VB怎么使用枚举数据类型?
先举一个例子vb.net枚举模块:
Public Enum TestEnum
OneEnum = 0 '"One"
TwoEnum = 1
'"Two"
ThreeEnum = 2 ' "Three"
End Enum
Sub test(b As TestEnum, a As String)
If b = OneEnum
Then
MsgBox "One" "," a
ElseIf b =
TwoEnum Then
MsgBox "Two" "," a
ElseIf b = ThreeEnum Then
MsgBox "Three" ","
a
End If
End Sub
Sub testRun()
test TwoEnum, "This is a Enum Test"
End Sub
说明如下vb.net枚举模块:
enum语句
定义枚举类型。
语法
[Public | Private] Enum name
membername [=
constantexpression]
membername [= constantexpression]
. . .
End
Enum
Enum 语句包含下面部分:
部分 描述
Public 可选的。表示该 Enum 类型在整个工程中都是可见的。Enum 类型的缺省情况是
Public。
Private 可选的。表示该 Enum 类型只在所声明的模块中是可见的。
name 必需的。该 Enum 类型的名称。name
必须是一个合法的 Visual Basic 标识符vb.net枚举模块,在定义该 Enum 类型的变量或参数时用该名称来指定类型。
membername 必需的。用于指定该
Enum 类型的组成元素名称的合法 Visual Basic 标识符。
constantexpression 可选的。元素的值(为 Long
类型)。可以是别的 Enum 类型。如果没有指定 constantexpression,则所赋给的值或者是 0(如果该元素是第一个
membername),或者比其直接前驱的值大 1。
说明
所谓枚举变量,就是指用 Enum 类型定义的变量。变量和参数都可以定义为 Enum 类型。Enum 类型中的元素被初始化为 Enum
语句中指定的常数值。所赋给的值可以包括正数和负数,且在运行时不能改变。例如:
Enum SecurityLevel
IllegalEntry = -1
SecurityLevel1 = 0
SecurityLevel2 = 1
End Enum
Enum 语句只能在模块级别中出现。定义 Enum
类型后,就可以用它来定义变量,参数或返回该类型的过程。不能用模块名来限定 Enum 类型。
类模块中的
Public Enum 类型并不是该类的成员vb.net枚举模块;只不过它们也被写入到类型库中。在标准模块中定义的 Enum
类型则不写到类型库中。具有相同名字的 Public Enum 类型不能既在标准模块中定义,又在类模块中定义,因为它们共享相同的命名空间。若不同的类型库中有两个
Enum类型的名字相同,但成员不同,则对这种类型的变量的引用,将取决于哪一个类型库具有更高的引用优先级。
不能在 With 块中使用 Enum
类型作为目标。
相关问答
Q1: VB.NET的枚举求教解决方法
这个功能实现起来其实也很简单vb.net枚举模块,就是通过反射去读取 DescriptionAttribute 的 Description 属性的值,代码如下所示vb.net枚举模块:
/// summary
/// 返回枚举项的描述信息。
/// /summary
/// param name="value"要获取描述信息的枚举项。/param
/// returns枚举想的描述信息。/returns
public static string GetDescription(Enum value)
{
Type enumType = value.GetType();
// 获取枚举常数名称。
string name = Enum.GetName(enumType, value);
if (name != null)
{
// 获取枚举字段。
FieldInfo fieldInfo = enumType.GetField(name);
if (fieldInfo != null)
{
// 获取描述的属性。
DescriptionAttribute attr = Attribute.GetCustomAttribute(fieldInfo,
typeof(DescriptionAttribute), false) as DescriptionAttribute;
if (attr != null)
{
return attr.Description;
}
}
}
return null;
}
这段代码还是很容易看懂的,这里取得枚举常数的名称使用的是 Enum.GetName() 而不是 ToString(),因为前者更快,而且对于不是枚举常数的值会返回 null,不用进行额外的反射。
当然,这段代码仅是一个简单的示例,接下来会进行更详细的分析。
Q2: 在vb.net中,如何枚举一个注册的组件其开放的COM类的接口函数。
为什么增加的回答这么久还没显示。
我想知道你为什么要枚举这些方法vb.net枚举模块,是需要打印出来还是只是为vb.net枚举模块了查看和调用?
1vb.net枚举模块,如果只是为了查看和调用的话vb.net枚举模块,不需要用代码就能知道了。
打开VSvb.net枚举模块,视图-》对象浏览器。然后开了后,点浏览右边的“。。。”,开了后。选COM活页,再在里面选ThunderAgent 1.0 Type Library。再点添加。
添加好之后。在左边的浏览窗口内就有了,展开THUNDERAGENTLib下面有几个类和接口,展开类就有方法了。
2,如果是需要用代码枚举并打印。网上有相关的代码,C#写的。我就不帖了。自己搜一下。改成vb.net相信应该不会太难。
祝你好运。
Q3: vb.net中如何调用枚举中的字符串
没有办法直接取枚举名,只能根据枚举值,自己赋值
Private Enum duihuaA As Integer
第一个
第二个
第三个
第四个
第五个
第六个
第七个
第八个
End Enum
调用:
Select case X
case duihuaA.第一个
Return "第一个"
case duihuaA.第二个
Return "第二个"
..............
Q4: VB中如何用ZwQueryVirtualMemory枚举进程模块?
声明自寻
Public Sub PrintProcessModules(ByVal dwProcessId As Long)
Dim ntStatus As Long
Dim objCid As CLIENT_ID
Dim objOa As OBJECT_ATTRIBUTES
Dim hProcess As Long
Dim dwVirtualAddr As Long
Dim pName As UNICODE_STRING1
Dim dwRet As Long
Dim intRet As Integer
Dim strModuleName As String
Dim pDosHeader As IMAGE_DOS_HEADER
Dim pNtHeaders As IMAGE_NT_HEADERS
Dim dwImageSize As Long
Dim MemoryBase As MEMORY_BASIC_INFORMATION
objOa.Length = Len(objOa)
objCid.UniqueProcess = dwProcessId
ntStatus = NtOpenProcess(hProcess, PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, objOa, objCid)
If hProcess = 0 Then
hProcess = GetHandleByProcessId(dwProcessId)
If hProcess = 0 Then
Exit Sub
End If
End If
dwVirtualAddr = H1000
Do While dwVirtualAddr H7FFF0000
ntStatus = ZwQueryVirtualMemory(hProcess, dwVirtualAddr, 0, VarPtr(MemoryBase), LenB(MemoryBase), dwRet)
If NT_SUCCESS(ntStatus) Then
If MemoryBase.AllocationBase = 0 Then
dwVirtualAddr = dwVirtualAddr + MemoryBase.RegionSize
dwVirtualAddr = dwVirtualAddr + MemoryBase.RegionSize Mod H1000
GoTo NextLoop
Else
ntStatus = ZwQueryVirtualMemory(hProcess, dwVirtualAddr, 2, VarPtr(pName), LenB(pName), dwRet)
If NT_SUCCESS(ntStatus) Then
ReadProcessMemory hProcess, ByVal MemoryBase.AllocationBase, pDosHeader, LenB(pDosHeader), ByVal 0
If pDosHeader.Magic H5A4D Then
dwVirtualAddr = dwVirtualAddr + MemoryBase.RegionSize
dwVirtualAddr = dwVirtualAddr + MemoryBase.RegionSize Mod H1000
GoTo NextLoop
End If
ReadProcessMemory hProcess, ByVal MemoryBase.AllocationBase + pDosHeader.lfanew, pNtHeaders, LenB(pNtHeaders), ByVal 0
If pNtHeaders.Signature IMAGE_NT_SIGNATURE Then
dwVirtualAddr = dwVirtualAddr + MemoryBase.RegionSize
dwVirtualAddr = dwVirtualAddr + MemoryBase.RegionSize Mod H1000
GoTo NextLoop
End If
strModuleName = Left(pName.pBuffer, InStr(pName.pBuffer, vbNullChar) - 1)
'Debug.Print strModuleName; MemoryBase.AllocationBase; pNtHeaders.OptionalHeader.ImageSize
If MemoryBase.Type = H1000000 Then
Form1.List1.AddItem strModuleName ";" Hex(MemoryBase.AllocationBase) ";" Hex(pNtHeaders.OptionalHeader.ImageSize) ";State:" Hex(MemoryBase.State) ";Type:" Hex(MemoryBase.Type) ";AllocationProtect:" Hex(MemoryBase.AllocationProtect) ";Protect:" Hex(MemoryBase.Protect)
End If
'dwVirtualAddr = dwVirtualAddr + pNtHeaders.OptionalHeader.ImageSize
dwVirtualAddr = MemoryBase.AllocationBase + pNtHeaders.OptionalHeader.ImageSize
dwVirtualAddr = dwVirtualAddr + pNtHeaders.OptionalHeader.ImageSize Mod H1000
Else
dwVirtualAddr = dwVirtualAddr + MemoryBase.RegionSize
dwVirtualAddr = dwVirtualAddr + MemoryBase.RegionSize Mod H1000
End If
End If
Else
dwVirtualAddr = dwVirtualAddr + H1000
End If
NextLoop:
Loop
NtClose hProcess
End Sub
Q5: VB.net如何枚举字符串?
Enum Week
周日 = 0
周一 = 1
周二 = 2
周三 = 3
周四 = 4
周五 = 5
周六 = 6
End Enum
Sub Main()
Dim myType As Type = GetType(Week)
MsgBox(Week.GetName(myType, Week.周二))
End Sub
关于vb.net枚举模块和net 枚举的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。






