2008-09-12 174 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, 泰勒