【问题标题】:'enum' type breaks in Windows Forms C# designer fileWindows 窗体 C# 设计器文件中的“枚举”类型中断
【发布时间】:2014-12-02 20:41:44
【问题描述】:

我想知道是否有人以前遇到过这个问题。我正在使用 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

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

【问题讨论】:

    标签: c# winforms visual-studio enums visual-studio-designer


    【解决方案1】:

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

    01 = 1
    10 = 2
    11 = 3
    

    3 既是一又是二。

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

    1   0001
    2   0010
    4   0100
    8   1000
    

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

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

    【讨论】:

    • 如果您想保留1,2,3 的概念,您可以使用位移作为设置值的一部分。 1<<11<<21<<3
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 2018-10-18
    • 2014-11-14
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 2011-09-26
    相关资源
    最近更新 更多