WinForms कॉम्बो बॉक्स में एक एनम को बांधना, और फिर इसे सेट करना


122

बहुत से लोगों ने इस सवाल का जवाब दिया है कि WinForms में कॉम्बो बॉक्स में एनम को कैसे बांधें। ऐसी बात हे:

comboBox1.DataSource = Enum.GetValues(typeof(MyEnum));

लेकिन यह प्रदर्शित करने के लिए वास्तविक मूल्य निर्धारित किए बिना बहुत बेकार है।

मैंने कोशिश की है:

comboBox1.SelectedItem = MyEnum.Something; // Does not work. SelectedItem remains null

मैंने भी कोशिश की है:

comboBox1.SelectedIndex = Convert.ToInt32(MyEnum.Something); // ArgumentOutOfRangeException, SelectedIndex remains -1

किसी को भी यह कैसे करना है कोई विचार है?


2
इसके बजाय सिर्फ ComboBox.SelectedValue की कोशिश क्यों नहीं की?
ओलिवर फ्रेडरिक

5
यदि आपके प्रश्न का उत्तर दिया गया है तो आपको वास्तव में उत्तर देना चाहिए।
रयान द लीच

एक दुश्मनी को आंकने की बात बिलकुल स्पष्ट नहीं है। रनटाइम के दौरान एक संभावना नहीं बदलेगी। आप एक विस्तार विधि भी लिख सकते हैं जो कॉम्बोक्स के आइटम संग्रह को एनम के सभी मूल्यों के साथ भर देगी।
एंड्रियास


मेरे लिए @OliverFriedrich SelectedValueकारण बनता है InvalidOperationException। "सेट नहीं कर सकता SelectedValueएक में ListControlएक खाली साथ ValueMember।"
टायलर

जवाबों:


161

द एनम

public enum Status { Active = 0, Canceled = 3 }; 

इससे ड्रॉप डाउन मान सेट करना

cbStatus.DataSource = Enum.GetValues(typeof(Status));

चयनित आइटम से एनम प्राप्त करना

Status status; 
Enum.TryParse<Status>(cbStatus.SelectedValue.ToString(), out status); 

5
धन्यवाद, यह मेरे लिए काम करता है। ध्यान में रखें कि tryparse एक .net 4.0 स्टेटमेंट है।
real_yggdrasil

मेरे लिए चयनितवैल्यू हमेशा शून्य है। ऐसा लगता है कि कॉम्बोबॉक्स की पहचान नहीं हो पाती है। (myEnum) this.GridView.CurrentRow.Cells [ "comboColumnCell"]। मान। मैं मूल्य देख सकता हूं, लेकिन आंतरिक रूप से यह शून्य सूचक अपवाद को फेंक देता है
ssal

3
यह ठीक उसी तरह है जिस तरह ओपी उपयोग नहीं करना चाहता है। समस्या यह है कि उपयोगकर्ता को प्रत्येक मूल्य के कोड में नाम प्रदर्शित किया जाता है, जो कि ज्यादातर बार उपयोगकर्ता के अनुकूल नहीं है।
अलेजांद्रो

5
क्यों Parse के बजाय TryParse का उपयोग करें? ... var status (स्थिति) Enum.Parse (टाइपोफ़ (स्थिति), cbStatus.SelectedValue.ToString ()); ... आप कॉनम को कॉम्बोबॉक्स से बाध्य करते हैं, इसलिए आप जानते हैं कि मान एक मान्य एनम मान होना चाहिए और यदि यह तब कुछ गलत हो गया है और आप शायद एक अपवाद चाहते हैं।
बट्टेदेव

1
यह विस्मरण क्यों है? सवाल यह है कि प्रोग्राम के कॉम्बोक्स के चयनित मान को कैसे निर्धारित किया जाए, जो कि एनम के मूल्यों में से एक का उपयोग करता है।
टायलर

39

सरल करने के लिए:

पहले इस आदेश को आरंभ करें: (जैसे बाद InitalizeComponent())

yourComboBox.DataSource =  Enum.GetValues(typeof(YourEnum));

कम्बोक्स पर चयनित आइटम प्राप्त करने के लिए:

YourEnum enum = (YourEnum) yourComboBox.SelectedItem;

यदि आप कोम्बोक्स के लिए मान सेट करना चाहते हैं:

yourComboBox.SelectedItem = YourEnem.Foo;

2
यह तब तक काम करता है जब तक डिस्प्ले वैल्यू वैल्यू मेंबर के समान है, अन्यथा नहीं।
लिपियों के भगवान

15

कोड

comboBox1.SelectedItem = MyEnum.Something;

ठीक है, समस्या को डेटाबाइंडिंग में रहना चाहिए। डेटाबाइंड असाइनमेंट कंस्ट्रक्टर के बाद होते हैं, मुख्य रूप से पहली बार कॉम्बोक्स दिखाया गया है। लोड ईवेंट में मान सेट करने का प्रयास करें। उदाहरण के लिए, इस कोड को जोड़ें:

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
    comboBox1.SelectedItem = MyEnum.Something;
}

और जांचें कि क्या यह काम करता है।


12

प्रयत्न:

comboBox1.SelectedItem = MyEnum.Something;

संपादन:

वूप्स, आपने पहले ही कोशिश की है। हालाँकि, यह मेरे लिए तब काम आया जब मेरा कॉम्बो बॉक्स ड्रॉपडाउनलिस्ट बनने के लिए तैयार था।

यहाँ मेरा पूरा कोड है जो मेरे लिए काम करता है (ड्रॉपडाउन और ड्रॉपडाउनलिस्ट दोनों के साथ):

public partial class Form1 : Form
{
    public enum BlahEnum
    { 
        Red,
        Green,
        Blue,
        Purple
    }

    public Form1()
    {
        InitializeComponent();

        comboBox1.DataSource = Enum.GetValues(typeof(BlahEnum));

    }

    private void button1_Click(object sender, EventArgs e)
    {
        comboBox1.SelectedItem = BlahEnum.Blue;
    }
}

दिलचस्प है, यह बहुत अच्छा है कि आप कर सकते हैं `comboBox1.SelectedItem = BlahEnum.Blue?` लेकिन क्या होगा अगर आप combobox में चीजें तार होना चाहिए जैसे combobox का एक आइटम "चबाने योग्य विटामिन की गोली" हो?
बार्लॉप

11

मान लीजिए कि आपके पास निम्नलिखित एनम है

public enum Numbers {Zero = 0, One, Two};

उन मानों को स्ट्रिंग में मैप करने के लिए आपके पास एक संरचना होनी चाहिए:

public struct EntityName
{
    public Numbers _num;
    public string _caption;

    public EntityName(Numbers type, string caption)
    {
        _num = type;
        _caption = caption;
    }

    public Numbers GetNumber() 
    {
        return _num;
    }

    public override string ToString()
    {
        return _caption;
    }
}

अब एक स्ट्रिंग में मैप की गई सभी एनमों के साथ ऑब्जेक्ट्स की एक सरणी लौटें:

public object[] GetNumberNameRange()
{
    return new object[]
    {
        new EntityName(Number.Zero, "Zero is chosen"),
        new EntityName(Number.One, "One is chosen"),
        new EntityName(Number.Two, "Two is chosen")
    };
}

और अपने कॉम्बो बॉक्स को पॉप्युलेट करने के लिए निम्नलिखित का उपयोग करें:

ComboBox numberCB = new ComboBox();
numberCB.Items.AddRange(GetNumberNameRange());

यदि आप किसी फ़ंक्शन में इसे पास करना चाहते हैं, तो एनम प्रकार को पुनः प्राप्त करने के लिए एक फ़ंक्शन बनाएं

public Numbers GetConversionType() 
{
    EntityName type = (EntityName)numberComboBox.SelectedItem;
    return type.GetNumber();           
}

और फिर आपको ठीक होना चाहिए :)


+1 अच्छा समाधान। हाल ही में यह बहुत समस्या थी और एक समान तरीके से हल की गई (बस Tupleइसके बजाय)। मैं Enum मान और विवरण दोनों को गुणों में बदल दूंगा, फिर a numberCB.DisplayProperty = "Caption"; `और numberCB.ValueProperty = "Num"ताकि आप SelectedValueसीधे उपयोग कर सकें और इसे बाइंड कर सकें।
एलेजांद्रो

IMHO, शायद अधिक पूर्ण नमूना स्रोत कोड, यदि कोई कार्यक्षमता है जैसे "All" / "Select All" विकल्प को कॉम्बो बॉक्स में खोज में सभी पंक्तियों को फ़िल्टर करने के लिए उपयोग किया जाता है।
किकेनेट

5

इसे इस्तेमाल करे:

// fill list
MyEnumDropDownList.DataSource = Enum.GetValues(typeof(MyEnum));

// binding
MyEnumDropDownList.DataBindings.Add(new Binding("SelectedValue", StoreObject, "StoreObjectMyEnumField"));

StoreObject MyOnum मान को संग्रहीत करने के लिए StoreObjectMyEnumField संपत्ति के साथ मेरा ऑब्जेक्ट उदाहरण है।


1
यह अब तक का सबसे अच्छा तरीका है, लेकिन जैसा कि यह है, यह मेरे लिए काम नहीं करता था। मुझे "चयनितवैल्यू" के बजाय "
टियागो फ्रीटास लील

4
 public static void FillByEnumOrderByNumber<TEnum>(this System.Windows.Forms.ListControl ctrl, TEnum enum1, bool showValueInDisplay = true) where TEnum : struct
    {
        if (!typeof(TEnum).IsEnum) throw new ArgumentException("An Enumeration type is required.", "enumObj");

        var values = from TEnum enumValue in Enum.GetValues(typeof(TEnum))
                     select
                        new
                         KeyValuePair<TEnum, string>(   (enumValue), enumValue.ToString());

        ctrl.DataSource = values
            .OrderBy(x => x.Key)

            .ToList();

        ctrl.DisplayMember = "Value";
        ctrl.ValueMember = "Key";

        ctrl.SelectedValue = enum1;
    }
    public static void  FillByEnumOrderByName<TEnum>(this System.Windows.Forms.ListControl ctrl, TEnum enum1, bool showValueInDisplay = true  ) where TEnum : struct
    {
        if (!typeof(TEnum).IsEnum) throw new ArgumentException("An Enumeration type is required.", "enumObj");

        var values = from TEnum enumValue in Enum.GetValues(typeof(TEnum))
                     select 
                        new 
                         KeyValuePair<TEnum,string> ( (enumValue),  enumValue.ToString()  );

        ctrl.DataSource = values
            .OrderBy(x=>x.Value)
            .ToList();

        ctrl.DisplayMember = "Value";
        ctrl.ValueMember = "Key";

        ctrl.SelectedValue = enum1;
    }

आपका मतलब क्या है ? मुझे आपकी टिप्पणी समझ में नहीं आई। यह विस्तार विधि काम करती है
मिकी पेरेलस्टीन

यह निर्भर करता है कि यदि आपके एनम नंबर OR फ्लैग की अनुमति देते हैं। यदि ऐसा है तो आप एक ऐसा ध्वज जोड़ सकते हैं जिसे 255 कहा जाता है, और सभी को enum1 के रूप में फ़ंक्शन को कॉल करें, जो डिफ़ॉल्ट बनाता है। यानी कॉम्बो बॉक्स 1।फिलबैन्यूमडरर नाम (MyEnum.All)
मिकी पेर्लस्टीन

इस तरह का कोई भी विकल्प: var l = values.OrderBy (x => x.Value) .ToList (); l.Insert (0, "सभी");
कीनिकात

मेरी दुश्मनी enum A {duck = 0, swan = 1, जोकर = 3} है; आपका सिस्टम मेरी स्थिति के लिए काम नहीं करेगा।
मिकी पेरेलस्टीन

3

यह कॉम्बोक्स में एनम के आइटम को लोड करने का उपाय है:

comboBox1.Items.AddRange( Enum.GetNames(typeof(Border3DStyle)));

और फिर टेक्स्ट के रूप में एनम आइटम का उपयोग करें:

toolStripStatusLabel1.BorderStyle = (Border3DStyle)Enum.Parse(typeof(Border3DStyle),comboBox1.Text);

3

@ एमीर शेनौडा के जवाब के आधार पर मैं इसे समाप्त करता हूं:

एनम की परिभाषा:

public enum Status { Active = 0, Canceled = 3 }; 

इससे ड्रॉप डाउन मान सेट करना:

cbStatus.DataSource = Enum.GetValues(typeof(Status));

चयनित आइटम से एनम प्राप्त करना:

Status? status = cbStatus.SelectedValue as Status?;

2
क्यों अशक्त का उपयोग करें? आप स्पष्ट कास्टिंग (कोष्ठक ढलाई) का उपयोग कर सकते हैं और अशक्त का उपयोग नहीं कर सकते हैं
जॉन डेमेट्रियौ

2
public Form1()
{
    InitializeComponent();
    comboBox.DataSource = EnumWithName<SearchType>.ParseEnum();
    comboBox.DisplayMember = "Name";
}

public class EnumWithName<T>
{
    public string Name { get; set; }
    public T Value { get; set; }

    public static EnumWithName<T>[] ParseEnum()
    {
        List<EnumWithName<T>> list = new List<EnumWithName<T>>();

        foreach (object o in Enum.GetValues(typeof(T)))
        {
            list.Add(new EnumWithName<T>
            {
                Name = Enum.GetName(typeof(T), o).Replace('_', ' '),
                Value = (T)o
            });
        }

        return list.ToArray();
    }
}

public enum SearchType
{
    Value_1,
    Value_2
}

IMHO, शायद अधिक पूर्ण नमूना स्रोत कोड, यदि कोई कार्यक्षमता है जैसे "All" / "Select All" विकल्प को कॉम्बो बॉक्स में खोज में सभी पंक्तियों को फ़िल्टर करने के लिए उपयोग किया जाता है।
किकेनेट


1

मैं निम्नलिखित सहायक विधि का उपयोग करता हूं, जिसे आप अपनी सूची में बांध सकते हैं।

    ''' <summary>
    ''' Returns enumeration as a sortable list.
    ''' </summary>
    ''' <param name="t">GetType(some enumeration)</param>
    Public Shared Function GetEnumAsList(ByVal t As Type) As SortedList(Of String, Integer)

        If Not t.IsEnum Then
            Throw New ArgumentException("Type is not an enumeration.")
        End If

        Dim items As New SortedList(Of String, Integer)
        Dim enumValues As Integer() = [Enum].GetValues(t)
        Dim enumNames As String() = [Enum].GetNames(t)

        For i As Integer = 0 To enumValues.GetUpperBound(0)
            items.Add(enumNames(i), enumValues(i))
        Next

        Return items

    End Function

1

एनम को स्ट्रिंग की सूची में परिवर्तित करें और इसे कॉम्बो बॉक्स में जोड़ें

comboBox1.DataSource = Enum.GetValues(typeof(SomeEnum)).Cast<SomeEnum>();

चयनित मान का उपयोग करके प्रदर्शित मान सेट करें

comboBox1.SelectedItem = SomeEnum.SomeValue;

1

इनमें से किसी ने भी मेरे लिए काम नहीं किया, लेकिन यह किया (और इसमें प्रत्येक दूत के नाम के लिए बेहतर वर्णन करने में सक्षम होने का अतिरिक्त लाभ था)। मुझे यकीन नहीं है कि यह नेट अपडेट के कारण है या नहीं, लेकिन मुझे लगता है कि यह सबसे अच्छा तरीका है। आपको एक संदर्भ जोड़ना होगा:

System.ComponentModel का उपयोग करना;

enum MyEnum
{
    [Description("Red Color")]
    Red = 10,
    [Description("Blue Color")]
    Blue = 50
}

....

    private void LoadCombobox()
    {
        cmbxNewBox.DataSource = Enum.GetValues(typeof(MyEnum))
            .Cast<Enum>()
            .Select(value => new
            {
                (Attribute.GetCustomAttribute(value.GetType().GetField(value.ToString()), typeof(DescriptionAttribute)) as DescriptionAttribute).Description,
                value
            })
            .OrderBy(item => item.value)
            .ToList();
        cmbxNewBox.DisplayMember = "Description";
        cmbxNewBox.ValueMember = "value";
    }

फिर जब आप डेटा का उपयोग करना चाहते हैं तो इन दो लाइनों का उपयोग करें:

        Enum.TryParse<MyEnum>(cmbxNewBox.SelectedValue.ToString(), out MyEnum proc);
        int nValue = (int)proc;

1

यह संभवतः अन्य सभी प्रतिक्रियाओं के बीच कभी नहीं देखा जा सकता है, लेकिन यह वह कोड है जिसके साथ मैं आया था, DescriptionAttributeअगर यह मौजूद है, तो इसका उपयोग करने का लाभ है, लेकिन अन्यथा एनम मूल्य के नाम का उपयोग करके।

मैंने एक शब्दकोष का उपयोग किया है क्योंकि इसमें एक तैयार की / मूल्य आइटम पैटर्न है। ए List<KeyValuePair<string,object>>भी काम करेगा और अनावश्यक हैशिंग के बिना, लेकिन एक कोड क्लीनर कोड के लिए बनाता है।

मैं सदस्यों को एक है कि मिल MemberTypeकी Fieldऔर कहा कि शाब्दिक हैं। यह केवल सदस्यों का एक क्रम बनाता है जो एनम वैल्यूज हैं। यह तब से अधिक मजबूत है क्योंकि किसी एनम के पास अन्य क्षेत्र नहीं हो सकते।

public static class ControlExtensions
{
    public static void BindToEnum<TEnum>(this ComboBox comboBox)
    {
        var enumType = typeof(TEnum);

        var fields = enumType.GetMembers()
                              .OfType<FieldInfo>()
                              .Where(p => p.MemberType == MemberTypes.Field)
                              .Where(p => p.IsLiteral)
                              .ToList();

        var valuesByName = new Dictionary<string, object>();

        foreach (var field in fields)
        {
            var descriptionAttribute = field.GetCustomAttribute(typeof(DescriptionAttribute), false) as DescriptionAttribute;

            var value = (int)field.GetValue(null);
            var description = string.Empty;

            if (!string.IsNullOrEmpty(descriptionAttribute?.Description))
            {
                description = descriptionAttribute.Description;
            }
            else
            {
                description = field.Name;
            }

            valuesByName[description] = value;
        }

        comboBox.DataSource = valuesByName.ToList();
        comboBox.DisplayMember = "Key";
        comboBox.ValueMember = "Value";
    }


}

0
comboBox1.SelectedItem = MyEnum.Something;

बस ठीक काम करना चाहिए ... आप कैसे कह सकते हैं कि SelectedItemअशक्त है?


मैं डिबगर में इसकी जांच कर सकता हूं। मुझे लगता है कि यह इसलिए है क्योंकि SelectItem का प्रकार ऑब्जेक्ट है, अर्थात एक संदर्भ प्रकार, और एनम मान प्रकार हैं। हालाँकि मुझे उम्मीद थी कि संकलक उसे पकड़ लेगा।

0

आप "FindString .." फ़ंक्शन का उपयोग कर सकते हैं:

Public Class Form1
    Public Enum Test
        pete
        jack
        fran
        bill
    End Enum
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ComboBox1.DataSource = [Enum].GetValues(GetType(Test))
        ComboBox1.SelectedIndex = ComboBox1.FindStringExact("jack")
        ComboBox1.SelectedIndex = ComboBox1.FindStringExact(Test.jack.ToString())
        ComboBox1.SelectedIndex = ComboBox1.FindStringExact([Enum].GetName(GetType(Test), Test.jack))
        ComboBox1.SelectedItem = Test.bill
    End Sub
End Class

0

आप दहन के लिए डेटा स्रोत के रूप में KeyValuePair मानों की एक सूची का उपयोग कर सकते हैं। आपको एक सहायक विधि की आवश्यकता होगी जहाँ आप एनम प्रकार निर्दिष्ट कर सकते हैं और यह IEnumerable> को वापस लौटाता है, जहाँ int एनम का मान है और स्ट्रिंग एनम मान का नाम है। अपने कॉम्बोबॉक्स में, सेट करें, DisplayMember प्रॉपर्टी को 'Key' और ValueMember प्रॉपर्टी को 'Value' करें। मान और कुंजी KeyValuePair संरचना के सार्वजनिक गुण हैं। फिर जब आप SelectItem प्रॉपर्टी को एनम वैल्यू पर सेट करते हैं, जैसे आप कर रहे हैं, तो यह काम करना चाहिए।


0

फिलहाल मैं डेटा स्रोत के बजाय आइटम प्रॉपर्टी का उपयोग कर रहा हूं, इसका मतलब है कि मुझे प्रत्येक एनम वैल्यू के लिए ऐड को कॉल करना होगा, लेकिन इसके एक छोटे से एनम, और वैसे भी इसका अस्थायी कोड।

तब मैं सिर्फ Convert.ToInt32 को वैल्यू पर कर सकता हूं और इसे SelectIndex के साथ सेट कर सकता हूं।

अस्थायी समाधान, लेकिन अभी के लिए YAGNI।

विचारों के लिए चीयर्स, मैं संभवतः उनका उपयोग करूंगा जब मैं ग्राहक प्रतिक्रिया का एक दौर प्राप्त करने के बाद उचित संस्करण करूंगा।


0

पुराना सवाल शायद यहाँ है, लेकिन मेरे पास मुद्दा था और समाधान आसान और सरल था, मुझे यह मिला http://www.c-sharpcorner.com/UploadFile/mahesh/1220/

यह डेटाबाइनिंग का उपयोग करता है और अच्छी तरह से काम करता है इसलिए इसे देखें।


0
comboBox1.DataSource = Enum.GetValues(typeof(MyEnum));

comboBox1.SelectedIndex = (int)MyEnum.Something;

comboBox1.SelectedIndex = Convert.ToInt32(MyEnum.Something);

मेरे लिए ये दोनों काम आप सुनिश्चित हैं कि कुछ और गलत नहीं है?


2
यकीन नहीं है कि यह काम करेगा अगर कस्टम एनम मूल्यों का उपयोग करते हुए, यानीenum MyEnum { Something = 47 }
सामन्था ब्रांहम

0

ड्रॉप डाउन के लिए डेटा स्रोत के रूप में एनम स्थापित करने के लिए सामान्य विधि

प्रदर्शन नाम होगा। चयनित मूल्य ही Enum होगा

public IList<KeyValuePair<string, T>> GetDataSourceFromEnum<T>() where T : struct,IConvertible
    {
        IList<KeyValuePair<string, T>> list = new BindingList<KeyValuePair<string, T>>();
        foreach (string value in Enum.GetNames(typeof(T)))
        {
            list.Add(new KeyValuePair<string, T>(value, (T)Enum.Parse(typeof(T), value)));
        }
        return list;
    }

0

वह हमेशा एक समस्या थी। यदि आपके पास एक क्रमबद्ध एनम है, जैसे 0 से ...

public enum Test
      one
      Two
      Three
 End

आप कॉम्बोक्स के नाम को बांध सकते हैं और इसके बजाय .SelectedValueसंपत्ति के उपयोग का उपयोग कर सकते हैं.SelectedIndex

   Combobox.DataSource = System.Enum.GetNames(GetType(test))

और यह

Dim x as byte = 0
Combobox.Selectedindex=x

0

फ्रेमवर्क 4 में आप निम्न कोड का उपयोग कर सकते हैं:

उदाहरण के लिए, कॉम्बोबॉक्स के लिए मल्टीकोल्यूमेनोड एनम को बांधने के लिए:

cbMultiColumnMode.Properties.Items.AddRange(typeof(MultiColumnMode).GetEnumNames());

और चयनित सूचकांक प्राप्त करने के लिए:

MultiColumnMode multiColMode = (MultiColumnMode)cbMultiColumnMode.SelectedIndex;

नोट: मैं इस उदाहरण में DevExpress combobox का उपयोग करता हूं, आप Win Form Combobox में भी ऐसा कर सकते हैं


0

इस पार्टी में थोड़ी देर,

SelectValue.ToString () विधि DisplayedName में खींचनी चाहिए। हालाँकि यह लेख DataBinding Enum और साथ ही विवरण के साथ न केवल उस के लिए एक आसान तरीका दिखाता है, बल्कि इसके बजाय आप enum में एक कस्टम विवरण विशेषता जोड़ सकते हैं और यदि आप चाहें तो इसे अपने प्रदर्शित मूल्य के लिए उपयोग कर सकते हैं। सब कुछ के लिए बहुत सरल और आसान और लगभग 15 लाइनें या कोड (जब तक आप घुंघराले ब्रेसिज़ की गिनती नहीं करते हैं)।

यह सुंदर निफ्टी कोड है और आप इसे बूट करने के लिए एक विस्तार विधि बना सकते हैं ...



0

आप एक एक्सटेंशन विधि का उपयोग कर सकते हैं

 public static void EnumForComboBox(this ComboBox comboBox, Type enumType)
 {
     var memInfo = enumType.GetMembers().Where(a => a.MemberType == MemberTypes.Field).ToList();
     comboBox.Items.Clear();
     foreach (var member in memInfo)
     {
         var myAttributes = member.GetCustomAttribute(typeof(DescriptionAttribute), false);
         var description = (DescriptionAttribute)myAttributes;
         if (description != null)
         {
             if (!string.IsNullOrEmpty(description.Description))
             {
                 comboBox.Items.Add(description.Description);
                 comboBox.SelectedIndex = 0;
                 comboBox.DropDownStyle = ComboBoxStyle.DropDownList;
             }
         }   
     }
 }

कैसे उपयोग करें ... घोषणा enumare

using System.ComponentModel;

public enum CalculationType
{
    [Desciption("LoaderGroup")]
    LoaderGroup,
    [Description("LadingValue")]
    LadingValue,
    [Description("PerBill")]
    PerBill
}

यह विधि कॉम्बो बॉक्स आइटम में वर्णन दिखाती है

combobox1.EnumForComboBox(typeof(CalculationType));

0

यह मेरे लिए काम किया:

comboBox1.DataSource = Enum.GetValues(typeof(MyEnum));
comboBox1.SelectedIndex = comboBox1.FindStringExact(MyEnum.something.ToString());
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.