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
类型作为目标 。
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,不用进行额外的反射 。
当然,这段代码仅是一个简单的示例,接下来会进行更详细的分析 。
在vb.net中 , 如何枚举一个注册的组件其开放的COM类的接口函数 。为什么增加的回答这么久还没显示 。
我想知道你为什么要枚举这些方法vb.net枚举模块,是需要打印出来还是只是为vb.net枚举模块了查看和调用?
1vb.net枚举模块,如果只是为了查看和调用的话vb.net枚举模块,不需要用代码就能知道了 。
打开VSvb.net枚举模块,视图-》对象浏览器 。然后开了后,点浏览右边的“ 。。。” , 开了后 。选COM活页,再在里面选ThunderAgent 1.0 Type Library 。再点添加 。
添加好之后 。在左边的浏览窗口内就有了 , 展开THUNDERAGENTLib下面有几个类和接口 , 展开类就有方法了 。
2,如果是需要用代码枚举并打印 。网上有相关的代码,C#写的 。我就不帖了 。自己搜一下 。改成vb.net相信应该不会太难 。
祝你好运 。
vb.net中如何调用枚举中的字符串没有办法直接取枚举名,只能根据枚举值,自己赋值
Private Enum duihuaA As Integer
第一个
第二个
第三个
第四个
第五个
第六个
【vb.net枚举模块 net 枚举】第七个
第八个
End Enum
调用:
Select case X
case duihuaA.第一个
Return "第一个"
case duihuaA.第二个
Return "第二个"
..............
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 dwVirtualAddrH7FFF0000
ntStatus = ZwQueryVirtualMemory(hProcess, dwVirtualAddr, 0, VarPtr(MemoryBase), LenB(MemoryBase), dwRet)
If NT_SUCCESS(ntStatus) Then
If MemoryBase.AllocationBase = 0 Then
dwVirtualAddr = dwVirtualAddrMemoryBase.RegionSize
dwVirtualAddr = dwVirtualAddrMemoryBase.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.MagicH5A4D Then
dwVirtualAddr = dwVirtualAddrMemoryBase.RegionSize
dwVirtualAddr = dwVirtualAddrMemoryBase.RegionSize Mod H1000
GoTo NextLoop
End If
ReadProcessMemory hProcess, ByVal MemoryBase.AllocationBasepDosHeader.lfanew, pNtHeaders, LenB(pNtHeaders), ByVal 0
If pNtHeaders.SignatureIMAGE_NT_SIGNATURE Then
dwVirtualAddr = dwVirtualAddrMemoryBase.RegionSize
dwVirtualAddr = dwVirtualAddrMemoryBase.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 = dwVirtualAddrpNtHeaders.OptionalHeader.ImageSize
dwVirtualAddr = MemoryBase.AllocationBasepNtHeaders.OptionalHeader.ImageSize
dwVirtualAddr = dwVirtualAddrpNtHeaders.OptionalHeader.ImageSize Mod H1000
Else
dwVirtualAddr = dwVirtualAddrMemoryBase.RegionSize
dwVirtualAddr = dwVirtualAddrMemoryBase.RegionSize Mod H1000
End If
End If
Else
dwVirtualAddr = dwVirtualAddrH1000
End If
NextLoop:
Loop
NtClose hProcess
End Sub
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 枚举的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- 什么是希区柯克拍摄法,希区柯克拍摄手法
- redis集群配置文件不一致,redis集群数据不一致
- 钉钉钉群后看不到直播,钉钉钉群后看不到直播怎么回事
- vb.net在线工具 vbnet reportviewer
- java求个数的代码,java求各位数字之和
- 益智设计游戏,益智游戏设计构思
- 抖音直播能挣到直播的钱吗,抖音直播可以赚钱么
- c语言中函数嵌套怎么做 c语言的函数嵌套
- 手机拍摄日食有什么预警,手机拍日食参数设置