1

我想知道是否有人以前遇到过这个问题。我正在使用 C#、.NET 4.5 和 Visual Studio 2013。

我有一个自定义文本框,它基本上只是继承自标准 Windows Forms TextBox。在其上,有如下属性:

public EnumName Property { get; set; }

EnumName枚举定义如下:

[Flags]  
public enum EnumName  
{  
     Value1 = 1,  
     Value2 = 2,  
     Value3 = 3  
}  

当我在表单上使用自定义控件并将属性设置为 时Value3,设计器实际上会:

control.EnumName = EnumName.Value1 | EnumName.Value2;

这可以。但是最近,当我向EnumName(例如,Value4 = 9999)添加一个新值时,设计师会改为这样做:

control.EnumName = EnumName.9999

有谁知道这背后的原因?这很令人沮丧。

4

1 回答 1

4

使用 [Flags] 属性,您说这个枚举是位标志的集合。这就是为什么 3 实际上是 1 | 2.

01 = 1
10 = 2
11 = 3

3既是一又是二。

您通常会为此枚举的独占成员添加值:

1   0001
2   0010
4   0100
8   1000

值 9999 将是以下标志设置“10011100001111”

如果 flags 属性有原因,请保留它并添加上面提到的值。如果不是,请删除该属性。

于 2014-12-02T20:50:08.923 回答