2013-03-27 3 views
0

깃발 기반 열거 형인 필자가 작성한 사용자 정의 컨트롤에 대한 속성이 있습니다. 논리적 인 방식으로 편집하고 자체 UITypeEditor에서 호출하는 방식으로 자체 사용자 정의 컨트롤을 만들었습니다. 문제는 Visual Studio에서 저장하려고 시도하는 값이 유효하지 않은 값을 나타내는 플래그의 조합 일 때 오류를 생성한다는 것입니다.사용자 정의 UITypeEditor에서 OR'ed 열거 형을 사용하십시오.

예 :

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

내가 저장할 값이 생성 된 값이 차례로 다음과 같은 오류 생성 9.입니다 SingleUnit | Trigger 경우 :

Code generation for the property 'TrayMode' failed. Error was: 'The value '9' is not valid for the enum 'TrayModes'.'

답변

0
You have to add [Flags] before your enum declaration 

[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 의 예에서 볼 수 있듯이 플래그 열거는 다른 방식으로 threated하는 속성 때문이다 , A Flags 속성이 있거나없는 enum 문자열로 서로 다른 모양을 보여줍니다.

있는 FlagsAttribute없이 91,363,210 열거 :있는 FlagsAttribute과 열거의 값

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

모든 가능한 조합 :

0 - Black 
    1 - Red 
    2 - Green 
    3 - Red, Green 
    4 - Blue 
    5 - Red, Blue 
    6 - Green, Blue 
    7 - Red, Green, Blue 
    8 - 8 
나는 그것을 추가 할 필요가 왜 이미이 언급 한
+0

구입? 귀하의 예제 코드에서 집합이 속성없이 작동하지만 내가 가진 상황은 오류가 발생합니다. 또한 나는 C# 2.0에있는'HasFlag' 메서드를 가지고 있지 않습니다. – Fr33dan

+0

예,'ToString' 결과를 변경 합니다만,이 예제를 보면 어떤 값도 열거 형의 유효한 값이라는 것을 볼 수 있습니다. 플래그 특성. 그렇지 않으면'ToString' 이전의 캐스트에 오류가 발생합니다. 'int'는 여전히 유효한 값이어야합니다. – Fr33dan

0

Flags가 속성 사용을 enum은 오류가 발생하지 않도록합니다. 이것은 플래그가없는 ORed enum을 저장하는 것이 유효하고 코드에서 수행 될 수 있다는 점에서 저에게 신비입니다 (적절한 캐스팅 사용).

관련 문제