0

我在编写的自定义控件上有一个属性,它是基于标志的枚举。我创建了自己的自定义控件,以一种合乎逻辑的方式对其进行编辑,并从我自己的 UITypeEditor 中调用它。问题是,当我尝试存储的值是它告诉我该值无效的标志的组合时,Visual Studio 会生成错误。

例子:

public enum TrayModes
{ 
    SingleUnit = 0x01
  , Tray = 0x02
  , Poll = 0x04
  , Trigger = 0x08
};

如果我要保存SingleUnit | Trigger的值是生成的值是 9。这反过来会产生以下错误:

属性“TrayMode”的代码生成失败。 错误是:'值'9'对于枚举'TrayModes'无效。'

4

2 回答 2

0

在枚举上使用Flags属性将防止错误发生。这对我来说是个谜,因为在没有标志的情况下存储 ORed 枚举是有效的,并且可以在代码中完成(使用适当的演员表)。

于 2013-03-27T15:48:49.777 回答
0

您必须[Flags]在您的枚举声明之前添加

[Flags]
public enum TrayModes
{ 
    SingleUnit = 0x01
   , Tray = 0x02
   , Poll = 0x04
   , Trigger = 0x08
};

考虑使用 HasFlag 函数来检查设置的标志

TrayModes t=TrayModes.SingleUnit|TrayModes.Poll;
if(t.HasFlag(TrayModes.SingleUnit))
//return true

编辑:这是因为带有 flags 属性的枚举以不同的方式受到威胁,正如您在http://msdn.microsoft.com/en-us/library/system.flagsattribute.aspx中的示例中所见 A To string of enum with并且没有 Flags 属性显示它们的不同之处

没有 FlagsAttribute 的 Enum 值的所有可能组合:

  0 - Black
  1 - Red
  2 - Green
  3 - 3
  4 - Blue
  5 - 5
  6 - 6
  7 - 7
  8 - 8

带有 FlagsAttribute 的枚举值的所有可能组合:

  0 - Black
  1 - Red
  2 - Green
  3 - Red, Green
  4 - Blue
  5 - Red, Blue
  6 - Green, Blue
  7 - Red, Green, Blue
  8 - 8
于 2013-03-27T15:58:28.770 回答