關于vb.net枚舉帶屬性的信息

VB.net如何枚舉字符串?

Enum Week

成都創新互聯主要從事網站設計、網站制作、網頁設計、企業做網站、公司建網站等業務。立足成都服務廣西,10年網站建設經驗,價格優惠、服務專業,歡迎來電咨詢建站服務:18980820575

周日 = 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腳本枚舉注冊表屬性

Option Explicit

'注冊表主鍵

Public Enum enumRegMainKey

iHKEY_CURRENT_USER = H80000001

iHKEY_LOCAL_MACHINE = H80000002

iHKEY_CLASSES_ROOT = H80000000

iHKEY_CURRENT_CONFIG = H80000005

iHKEY_USERS = H80000003

End Enum

'注冊表數據類型

Public Enum enumRegSzType

iREG_SZ = H1

iREG_EXPAND_SZ = H2

iREG_BINARY = H3

iREG_DWORD = H4

iREG_NONE = 0

iREG_DWORD_LITTLE_ENDIAN = 4

iREG_DWORD_BIG_ENDIAN = 5

iREG_LINK = 6

iREG_MULTI_SZ = 7

iREG_RESOURCE_LIST = 8

iREG_FULL_RESOURCE_DESCRIPTOR = 9

iREG_RESOURCE_REQUIREMENTS_LIST = 10

End Enum

'注冊表

Private Const ERROR_SUCCESS = 0

Private Const ERROR_BADDB = 1009

Private Const ERROR_BADKEY = 1010

Private Const ERROR_CANTOPEN = 1011

Private Const ERROR_CANTREAD = 1012

Private Const ERROR_CANTWRITE = 1013

Private Const ERROR_OUTOFMEMORY = 14

Private Const ERROR_INVALID_PARAMETER = 87

Private Const ERROR_ACCESS_DENIED = 5

Private Const ERROR_NO_MORE_ITEMS = 259

Private Const ERROR_MORE_DATA = 234

Private Const KEY_QUERY_VALUE = H1

Private Const KEY_SET_VALUE = H2

Private Const KEY_CREATE_SUB_KEY = H4

Private Const KEY_ENUMERATE_SUB_KEYS = H8

Private Const KEY_NOTIFY = H10

Private Const KEY_CREATE_LINK = H20

Private Const SYNCHRONIZE = H100000

Private Const READ_CONTROL = H20000

Private Const WRITE_DAC = H40000

Private Const WRITE_OWNER = H80000

Private Const STANDARD_RIGHTS_REQUIRED = HF0000

Private Const STANDARD_RIGHTS_READ = READ_CONTROL

Private Const STANDARD_RIGHTS_WRITE = READ_CONTROL

Private Const STANDARD_RIGHTS_EXECUTE = READ_CONTROL

Private Const KEY_READ = STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY

Private Const KEY_WRITE = STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY

Private Const KEY_EXECUTE = KEY_READ

Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long

Private Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, phkResult As Long, lpdwDisposition As Long) As Long

Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long

Private Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, ByVal lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As FILETIME) As Long

Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long

Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long

Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long

Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long

Private Declare Function RegSetValueExLong Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Long, ByVal cbData As Long) As Long

Private Declare Function RegSetValueExA Lib "advapi32.dll" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByRef lpData As Long, ByVal cbData As Long) As Long

Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long ' Note that if you declare the lpData parameter as String, you must pass it By Value.

Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long

Private Declare Function RegSaveKey Lib "advapi32.dll" Alias "RegSaveKeyA" (ByVal hKey As Long, ByVal lpFile As String, ByVal lpSecurityAttributes As Long) As Long

Private Declare Function RegRestoreKey Lib "advapi32.dll" Alias "RegRestoreKeyA" (ByVal hKey As Long, ByVal lpFile As String, ByVal dwflags As Long) As Long

Private Type FILETIME

dwLowDateTime As Long

dwHighDateTime As Long

End Type

Private Type SECURITY_ATTRIBUTES

nLength As Long

lpSecurityDescriptor As Long

bInheritHandle As Boolean

End Type

Public Function GetValue(ByVal mainKey As enumRegMainKey, _

ByVal subKey As String, _

ByVal keyV As String, _

ByRef sValue As Variant, _

Optional ByRef rlngErrNum As Long, _

Optional ByRef rstrErrDescr As String) As Boolean

Dim hKey As Long, lType As Long, lBuffer As Long, sBuffer As String, lData As Long

On Error GoTo GetValueErr

GetValue = False

If RegOpenKeyEx(mainKey, subKey, 0, KEY_READ, hKey) ERROR_SUCCESS Then

Err.Raise vbObjectError + 1, , "獲取注冊表值時出錯"

End If

If RegQueryValueEx(hKey, keyV, 0, lType, ByVal 0, lBuffer) ERROR_SUCCESS Then

Err.Raise vbObjectError + 1, , "獲取注冊表值時出錯"

End If

Select Case lType

Case iREG_SZ

lBuffer = 255

sBuffer = Space(lBuffer)

If RegQueryValueEx(hKey, keyV, 0, lType, ByVal sBuffer, lBuffer) ERROR_SUCCESS Then

Err.Raise vbObjectError + 1, , "獲取注冊表值時出錯"

End If

sValue = Left(sBuffer, InStr(sBuffer, Chr(0)) - 1)

Case iREG_EXPAND_SZ

sBuffer = Space(lBuffer)

If RegQueryValueEx(hKey, keyV, 0, lType, ByVal sBuffer, lBuffer) ERROR_SUCCESS Then

Err.Raise vbObjectError + 1, , "獲取注冊表值時出錯"

End If

sValue = Left(sBuffer, InStr(sBuffer, Chr(0)) - 1)

Case iREG_DWORD

If RegQueryValueEx(hKey, keyV, 0, lType, lData, lBuffer) ERROR_SUCCESS Then

Err.Raise vbObjectError + 1, , "獲取注冊表值時出錯"

End If

sValue = lData

Case iREG_BINARY

If RegQueryValueEx(hKey, keyV, 0, lType, lData, lBuffer) ERROR_SUCCESS Then

Err.Raise vbObjectError + 1, , "獲取注冊表值時出錯"

End If

sValue = lData

End Select

If RegCloseKey(hKey) ERROR_SUCCESS Then

Err.Raise vbObjectError + 1, , "獲取注冊表值時出錯"

End If

GetValue = True

Err.Clear

GetValueErr:

rlngErrNum = Err.Number

rstrErrDescr = Err.Description

End Function

Public Function SetValue(ByVal mainKey As enumRegMainKey, _

ByVal subKey As String, _

ByVal keyV As String, _

ByVal lType As enumRegSzType, _

ByVal sValue As Variant, _

Optional ByRef rlngErrNum As Long, _

Optional ByRef rstrErrDescr As String) As Boolean

Dim S As Long, lBuffer As Long, hKey As Long

Dim ss As SECURITY_ATTRIBUTES

On Error GoTo SetValueErr

SetValue = False

ss.nLength = Len(ss)

ss.lpSecurityDescriptor = 0

ss.bInheritHandle = True

If RegCreateKeyEx(mainKey, subKey, 0, "", 0, KEY_WRITE, ss, hKey, S) ERROR_SUCCESS Then

Err.Raise vbObjectError + 1, , "設置注冊表時出錯"

End If

Select Case lType

Case iREG_SZ

lBuffer = LenB(sValue)

If RegSetValueEx(hKey, keyV, 0, lType, ByVal sValue, lBuffer) ERROR_SUCCESS Then

Err.Raise vbObjectError + 1, , "設置注冊表時出錯"

End If

Case iREG_EXPAND_SZ

lBuffer = LenB(sValue)

If RegSetValueEx(hKey, keyV, 0, lType, ByVal sValue, lBuffer) ERROR_SUCCESS Then

Err.Raise vbObjectError + 1, , "設置注冊表時出錯"

End If

Case iREG_DWORD

lBuffer = 4

If RegSetValueExA(hKey, keyV, 0, lType, sValue, lBuffer) ERROR_SUCCESS Then

Err.Raise vbObjectError + 1, , "設置注冊表時出錯"

End If

Case iREG_BINARY

lBuffer = 4

If RegSetValueExA(hKey, keyV, 0, lType, sValue, lBuffer) ERROR_SUCCESS Then

Err.Raise vbObjectError + 1, , "設置注冊表時出錯"

End If

Case Else

Err.Raise vbObjectError + 1, , "不支持該參數類型"

End Select

If RegCloseKey(hKey) ERROR_SUCCESS Then

Err.Raise vbObjectError + 1, , "設置注冊表時出錯"

End If

SetValue = True

Err.Clear

SetValueErr:

rlngErrNum = Err.Number

rstrErrDescr = Err.Description

End Function

Public Function DeleteValue(ByVal mainKey As enumRegMainKey, _

ByVal subKey As String, _

ByVal keyV As String, _

Optional ByRef rlngErrNum As Long, _

Optional ByRef rstrErrDescr As String) As Boolean

Dim hKey As Long

On Error GoTo DeleteValueErr

DeleteValue = False

If RegOpenKeyEx(mainKey, subKey, 0, KEY_WRITE, hKey) ERROR_SUCCESS Then

Err.Raise vbObjectError + 1, , "刪除注冊表值時出錯"

End If

If RegDeleteValue(hKey, keyV) ERROR_SUCCESS Then

Err.Raise vbObjectError + 1, , "刪除注冊表值時出錯"

End If

If RegCloseKey(hKey) ERROR_SUCCESS Then

Err.Raise vbObjectError + 1, , "刪除注冊表值時出錯"

End If

DeleteValue = True

Err.Clear

DeleteValueErr:

rlngErrNum = Err.Number

rstrErrDescr = Err.Description

End Function

Public Function DeleteKey(ByVal mainKey As enumRegMainKey, _

ByVal subKey As String, _

ByVal keyV As String, _

Optional ByRef rlngErrNum As Long, _

Optional ByRef rstrErrDescr As String) As Boolean

Dim hKey As Long

On Error GoTo DeleteKeyErr

DeleteKey = False

If RegOpenKeyEx(mainKey, subKey, 0, KEY_WRITE, hKey) ERROR_SUCCESS Then

Err.Raise vbObjectError + 1, , "刪除注冊表值時出錯"

End If

If RegDeleteKey(hKey, keyV) ERROR_SUCCESS Then

Err.Raise vbObjectError + 1, , "刪除注冊表值時出錯"

End If

If RegCloseKey(hKey) ERROR_SUCCESS Then

Err.Raise vbObjectError + 1, , "刪除注冊表值時出錯"

End If

DeleteKey = True

Err.Clear

DeleteKeyErr:

rlngErrNum = Err.Number

rstrErrDescr = Err.Description

End Function

VB.NET的枚舉求教解決方法

這個功能實現起來其實也很簡單,就是通過反射去讀取 DescriptionAttribute 的 Description 屬性的值,代碼如下所示:

/// 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枚舉帶屬性的信息
網頁路徑:http://m.kartarina.com/article0/hegoio.html

成都網站建設公司_創新互聯,為您提供手機網站建設服務器托管用戶體驗軟件開發微信公眾號搜索引擎優化

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

網站建設網站維護公司
主站蜘蛛池模板: 在线无码视频观看草草视频| 最新中文字幕av无码专区 | 无码人妻久久一区二区三区免费丨| 亚洲av无码片在线观看| 一本无码人妻在中文字幕免费| 一区二区三区无码高清视频| 久久亚洲精品无码aⅴ大香| 无码日本精品XXXXXXXXX| 一本一道av中文字幕无码| 无码乱码观看精品久久| 亚洲爆乳无码精品AAA片蜜桃| 国产成人无码精品久久久久免费 | 国产一区二区三区无码免费| 男人的天堂无码动漫AV| 无码专区中文字幕无码| 亚洲人成人无码网www电影首页 | 无套中出丰满人妻无码| 亚洲AV无码成H人在线观看| 亚洲精品无码av片| 日韩欧精品无码视频无删节| 无码GOGO大胆啪啪艺术| 精品无码国产自产拍在线观看蜜 | 亚洲av永久无码一区二区三区| 中文字幕乱妇无码AV在线| 免费无码国产在线观国内自拍中文字幕 | 精品无码人妻久久久久久| 无码国产精品久久一区免费| 亚洲人成网亚洲欧洲无码| 亚洲va无码专区国产乱码| 日韩免费无码视频一区二区三区| 久久久精品无码专区不卡| 人妻aⅴ中文字幕无码| 无码av高潮喷水无码专区线| 亚洲AV无码国产精品色| 欧洲精品久久久av无码电影| 中文字幕无码播放免费| 蜜芽亚洲av无码精品色午夜| 久久久久久亚洲Av无码精品专口 | 97人妻无码一区二区精品免费| 亚洲av无码国产精品色午夜字幕 | 亚洲va无码va在线va天堂|