2014-12-02 50 views
1

我想知道是否有人遇到过这个问题。我正在使用C#,.NET 4.5和Visual Studio 2013.'enum'type breaks in Windows Forms C#设计器文件

我有一个自定义文本框,其中一个基本上只是从标准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 

有谁知道这背后的原因是什么?这非常令人沮丧。

回答

4

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

01 = 1 
10 = 2 
11 = 3 

3既是一,二。

您通常会添加值,该枚举的独家成员:

1 0001 
2 0010 
4 0100 
8 1000 

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

如果没有为标志属性的原因,离开它并添加上面提到的值。如果没有,请删除该属性。

+3

如果您想保留'1,2,3'概念,则可以使用位移作为设置值的一部分。 '1 << 1','1 << 2','1 << 3'等 – 2014-12-03 14:11:28