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

我有一个自定义文本框,该文本框基本上只是继承自标准Windows窗体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


有谁知道背后的原因吗?真令人沮丧。

最佳答案

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

01 = 1
10 = 2
11 = 3


3既是一又是两个。

通常,您将为此枚举的互斥成员添加值:

1   0001
2   0010
4   0100
8   1000


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

如果有使用flags属性的原因,请保留该属性并添加如上所述的值。如果不是,请删除该属性。

07-26 03:42