Using a OR'ed Enum in a custom UITypeEditor

回眸只為那壹抹淺笑 提交于 2019-12-25 06:15:50

问题


I have a property on a custom control I have written that is an Flag based Enum. I created my own custom control to edit it in a way that makes logical sense and called it from my own UITypeEditor. The problem is that Visual Studio generates an error when the value I attempt to store is a combination of the flags it tells me the value is invalid.

Example:

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

If the value I want to save is SingleUnit | Trigger the value generated is 9. Which in turn creates the following error:


回答1:


You have to add [Flags] before your enum declaration

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

Consider using HasFlag function to check for setted flags

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

Edit: That's because enum with flags attribute are threated in a different way, as you can see in the example in http://msdn.microsoft.com/en-us/library/system.flagsattribute.aspx A To string of enum with and without Flags attribute show how they are different

All possible combinations of values of an Enum without FlagsAttribute:

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

All possible combinations of values of an Enum with FlagsAttribute:

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



回答2:


Using the Flags attribute on the enum will prevent the error from happening. This is a mystery to me as storing an ORed enum without the flag is valid and can be done in the code (With a proper cast).



来源:https://stackoverflow.com/questions/15663166/using-a-ored-enum-in-a-custom-uitypeeditor

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!