2008-09-12 18 views

उत्तर

40

मुझे विश्वास है कि आप क्या चाहते हैं एक ध्वज प्रकार enum है।

आपको एनम के शीर्ष पर ध्वज विशेषता जोड़ने की आवश्यकता है, और फिर आप 'या' कीवर्ड के साथ enums को जोड़ सकते हैं।

इस तरह:

<Flags()> _ 
Enum CombinationEnums As Integer 
    HasButton = 1 
    TitleBar = 2 
    ReadOnly = 4 
    ETC = 8 
End Enum 

नोट: सही करने के लिए संख्या हमेशा दो बार के रूप में बड़ी (2 की शक्तियों) कर रहे हैं - इस व्यक्ति झंडे कि निर्धारित किया गया है अलग करने के लिए सक्षम होने के लिए की जरूरत है।

या कीवर्ड का उपयोग कर वांछित झंडे संयुक्त करें:

जांच करने के लिए क्या सेट किया गया है enum में

Dim settings As CombinationEnums 
settings = CombinationEnums.TitleBar Or CombinationEnums.Readonly 

यह शीर्षक पट्टी और केवल पढ़ने के लिए सेट:

If (settings And CombinationEnums.TitleBar) = CombinationEnums.TitleBar Then 
    Window.TitleBar = True 
End If 
+0

ग्रेट उत्तर। यदि यह तुरंत स्पष्ट नहीं है, (जैसा कि जोनास फोलेसो अपने उत्तर में बताते हैं) - इसकी कुंजी 2 (1,2,4,8,16, आदि) की शक्ति के लिए एनम मूल्यों का उपयोग कर रही है – Andrew

+11

यदि आप हैं .NET 4 का उपयोग करके, आप कोड को पढ़ने के लिए थोड़ा आसान बनाने के लिए हैसफ्लैग विधि का उपयोग कर सकते हैं - यदि सेटिंग्स। हैसफ्लैग (संयोजन एनीम्स। टिटलेबार) फिर ब्ला ब्ला –

0

यदि आप enum flags() का उपयोग करने के बारे में लेते हैं तो एक अच्छा लेख here है।

1

यदि मैं आपके प्रश्न को सही ढंग से समझता हूं तो आप विभिन्न enum प्रकारों को गठबंधन करना चाहते हैं। तो एक चर परिवर्तक दो अलग-अलग enum के दाहिनी ओर से एक मूल्य स्टोर कर सकते हैं? यदि आप एक enum प्रकार के दो अलग-अलग मानों को संयोजित करने के बारे में पूछ रहे हैं तो आप डेव आर्केल के स्पष्टीकरण

एन्म्स कुछ वाक्य रचनात्मक चीनी के साथ पूर्णांक हैं। इसलिए यदि आप सुनिश्चित करते हैं कि कोई ओवरलैप नहीं है तो आप उन्हें int में कास्टिंग करके जोड़ सकते हैं।

हालांकि यह सुंदर कोड के लिए नहीं होगा। मैं ज्यादातर समय enums का उपयोग करने से बचने की कोशिश करता हूँ। आम तौर पर यदि आप अपने कोड में नस्लों की नस्ल देते हैं तो यह बार-बार केस स्टेटमेंट और अन्य गन्दा एंटीपार्टर्न को जन्म देने से पहले ही समय की बात है।

1

संयोजन के लिए महत्वपूर्ण Enum रों सुनिश्चित करें कि मूल्य दो (1, 2, 4, 8, आदि) की एक शक्ति है कि आप उन्हें (|=&=) पर थोड़ा कार्रवाई कर सकते हैं बनाने के लिए है। उन Enum एस को Flags विशेषता के साथ टैग किया जा सकता है। विंडोज फॉर्म नियंत्रण पर Anchor संपत्ति इस तरह के नियंत्रण का एक उदाहरण है। यदि इसे ध्वज के रूप में चिह्नित किया गया है, तो विजुअल स्टूडियो आपको प्रॉपर्टी डिज़ाइनर में ड्रॉप-डाउन में एक को चुनने के बजाय मानों की जांच करने देगा।

+3

दो की शक्तियां: 1 = 2^0 मत भूलना! –

+0

"कोई नहीं" के लिए 0 मान प्रदान करना हमेशा अच्छा होता है। – Nyerguds

3

आप FlagsAttribute उपयोग कर सकते हैं एक एनम को सजाने के लिए जो आपको एनम को गठबंधन करने देगा:

<FlagsAttribute> _ 
Public Enumeration SecurityRights 
None = 0 
Read = 1 
Write = 2 
Execute = 4 

और फिर उन्हें इतना (कक्षा UserPriviltes) की तरह फोन:

Public Sub New (_ 
    options As SecurityRights _ 
) 

New UserPrivileges(SecurityRights.Read OR SecurityRights.Execute) 

वे प्रभावी रूप से संयुक्त हो (बिट गणित) इतना है कि इसके बाद के संस्करण उपयोगकर्ता दोनों पढ़ें है और निष्पादित सभी एक फैंसी SecurityRights चर में चारों ओर ले गए।

//Check to see if user has Write rights 
If (user.Privileges And SecurityRights.Write = SecurityRigths.Write) Then 
    //Do something clever... 
Else 
    //Tell user he can't write. 
End If 

HTH, टायलर:

यदि उपयोगकर्ता एक विशेषाधिकार आप का उपयोग और (अधिक बिटवाइज़ गणित) उन Enum मान के साथ enum मान की जाँच करने के लिए जाँच कर रहे हैं देखने के लिए जाँच करने के लिए

+0

बिटविक्टर 32 का उपयोग क्यों न करें? – Maslow

+0

@abatishchev यह आलेख से मुझे नहीं मिला है। 'झंडे की गणना के शून्य मान का नाम दें' कोई नहीं '...' मान हमेशा मतलब होना चाहिए कि सभी झंडे साफ़ कर दिए गए हैं '। यह क्या कहता है कि आपको कुछ अतिरिक्त राज्य का मतलब शून्य का उपयोग नहीं करना चाहिए, बल्कि शून्य का मतलब कोई राज्य नहीं है (यानी 'कोई नहीं')। –

+0

-1। आपने के उपयोग को बर्बाद कर दिया है, जो कि 2 की शक्ति नहीं हैं। नेट आपके जादुई रूप से टकराव नहीं करने के लिए आपके उदाहरण में "1" और "3" बिट पैटर्न का कारण बनता है। – ToolmakerSteve

संबंधित मुद्दे