2008-09-12 211 views

回答

40

我相信你想要的是一個標誌類型的枚舉。

您需要將Flags屬性添加到枚舉的頂部,然後您可以將枚舉與'Or'關鍵字結合使用。

像這樣:

<Flags()> _ 
Enum CombinationEnums As Integer 
    HasButton = 1 
    TitleBar = 2 
    ReadOnly = 4 
    ETC = 8 
End Enum 

注:到右邊的數字總是兩倍大(2的冪) - 這是需要能夠對已設置的各個標誌位。

聯合使用或關鍵字所期望的標誌:

Dim settings As CombinationEnums 
settings = CombinationEnums.TitleBar Or CombinationEnums.Readonly 

這臺標題欄,然後只讀到枚舉

要檢查什麼的設置:

If (settings And CombinationEnums.TitleBar) = CombinationEnums.TitleBar Then 
    Window.TitleBar = True 
End If 
+0

很棒的回答。 (如JonasFollesø在他的回答中指出的那樣) - 關鍵在於使用Enum值來表示權力2(1,2,4,8,16等) – Andrew 2008-09-12 10:09:29

0

如果你考慮使用枚舉標誌()有一篇好文章here

1

如果我正確理解你的問題,你想要結合不同的枚舉類型。所以一個變量可以存儲來自兩個不同枚舉的權利之一的值?如果你問的是將兩個不同值的一個枚舉類型結合起來存儲,你可以看看Dave Arkell的解釋

枚舉只是含有一些語法糖的整數。所以如果你確定沒有重疊,你可以通過將它們轉換爲int來進行組合。

雖然它不會讓漂亮的代碼。我儘量避免大部分時間使用枚舉。通常情況下,如果讓枚舉在代碼中繁殖,那麼在生成重複的case語句和其他混亂的反模式之前,只是時間問題。

1

組合Enum的關鍵是確保該值是2的冪(1,2,4,8等),以便您可以對它們執行位操作(|=&=)。那些Enum可以使用Flags屬性進行標記。 Windows窗體控件上的Anchor屬性就是這種控件的一個例子。如果標記爲標記,Visual Studio將允許您檢查值而不是在屬性設計器的下拉列表中選擇單個值。

+3

兩種權力:不要忘記1 = 2^0! – 2008-09-12 09:03:06

+0

爲「無」提供0值也是很好的。 – Nyerguds 2017-11-30 12:35:35

3

可以使用的FlagsAttribute裝飾一個枚舉像這樣可以讓你結合Enum:

<FlagsAttribute> _ 
Public Enumeration SecurityRights 
None = 0 
Read = 1 
Write = 2 
Execute = 4 

然後叫他們像這樣(類UserPriviltes):

Public Sub New (_ 
    options As SecurityRights _ 
) 

New UserPrivileges(SecurityRights.Read OR SecurityRights.Execute) 

,使上述用戶讀取和執行在一個花哨SecurityRights變量都進行圍繞他們有效地得到組合(位數學)。

要檢查用戶是否有您使用權限,(更按位數學),以檢查用戶提供枚舉值枚舉值你檢查:

//Check to see if user has Write rights 
If (user.Privileges And SecurityRights.Write = SecurityRigths.Write) Then 
    //Do something clever... 
Else 
    //Tell user he can't write. 
End If 

HTH, 泰勒