0

私が作成したカスタム コントロールに、フラグ ベースの Enum であるプロパティがあります。論理的に意味のある方法で編集する独自のカスタム コントロールを作成し、独自の UITypeEditor から呼び出しました。問題は、保存しようとした値が、値が無効であることを示すフラグの組み合わせである場合に、Visual Studio がエラーを生成することです。

例:

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

保存したいSingleUnit | Trigger値が生成された値である場合、次のエラーが発生します。

プロパティ 'TrayMode' のコード生成に失敗しました。 エラー: 「値 '9' は、列挙型 'TrayModes' には無効です。」

4

2 に答える 2

0

列挙型でFlags属性を使用すると、エラーが発生しなくなります。フラグなしで ORed 列挙型を格納することは有効であり、コードで実行できるため、これは私にとって謎です (適切なキャストを使用)。

于 2013-03-27T15:48:49.777 に答える
0

[Flags]enum宣言の前に追加する必要があります

[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

編集: これは、http: //msdn.microsoft.com/en-us/library/system.flagsattribute.aspx の例でわかるように、flags 属性を持つ列挙型が別の方法で脅かされているためです。 Flags 属性なしで、それらがどのように異なるかを示します

FlagsAttribute を使用しない Enum の値の可能なすべての組み合わせ:

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

Enum と 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 に答える