একটি উইনফর্মস কম্বো বাক্সে একটি এনামকে বাঁধাই এবং তারপরে এটি সেট করা


122

উইনফোর্মে একটি কম্বো বাক্সে এনামকে কীভাবে বেঁধে রাখা যায় এই প্রশ্নের উত্তর অনেক লোকই দিয়েছেন। এটি এর মতো:

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
এর পরিবর্তে কেন কম্বোবক্স.সিলেক্টভ্যালু চেষ্টা করবেন না?
অলিভার ফ্রেডরিখ

5
যদি আপনার প্রশ্নের উত্তর দেওয়া হয়ে থাকে তবে আপনার অবশ্যই একটি উত্তর বেছে নেওয়া উচিত।
রায়ান দ্য লিচ

একটি এনামকে ডেটাবাইন্ডিংয়ের বিষয়টিটি খুব পরিষ্কার নয়। রানটাইমের সময় একটি এনাম সম্ভবত পরিবর্তন হবে না change আপনি এনটেমের সমস্ত মান সহ কম্বোবক্সের আইটেম সংগ্রহ পূরণ করতে পারে এমন একটি এক্সটেনশন পদ্ধতিও লিখতে পারেন।
Andreas

সংশ্লিষ্ট: stackoverflow.com/q/5638639/161052
JYelton

অলিভারফ্রিডরিচ আমার জন্য 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
ধন্যবাদ, এটি আমার পক্ষে কাজ করে। মনে রাখবেন ট্রাইপার্সটি একটি নেট নেট স্টেটমেন্ট statement
রিয়েল_ইগজিড্রেসিল

আমার জন্য সিলেক্টভ্যালু সর্বদা নালার। দেখে মনে হচ্ছে কম্বোবক্স আন্তঃবিষ্ট হয় না। (myEnum) this.GridView.CurrentRow.Cells [ "comboColumnCell"]। মান। আমি মান দেখতে পাচ্ছি তবে অভ্যন্তরীণভাবে এটি নাল পয়েন্টার ব্যতিক্রম ছোঁড়ে
সসাল

3
এটি হ'ল উপায়টি ওপি ব্যবহার করতে চায় না। সমস্যাটি হ'ল ব্যবহারকারীর প্রতিটি মানের কোডে নাম প্রদর্শিত হয়, যা বেশিরভাগ সময় রিফ্যাক্টরিংয়ের সাপেক্ষে এবং ব্যবহারকারী বান্ধব নয়।
আলেজান্দ্রো

5
কেন পার্সের চেয়ে ট্রাইপার্স ব্যবহার করবেন? ... var স্ট্যাটাস (স্ট্যাটাস) এনাম.পার্স (টাইপফ (স্ট্যাটাস), সিবিস্ট্যাটাস।স্লেটেডভ্যালু.টস্ট্রিং ()); ... আপনি এনম্বকে কম্বোবক্সে বেঁধে রেখেছেন যাতে আপনি জানেন যে মানটি অবশ্যই একটি বৈধ এনাম মান হতে পারে এবং যদি এটি তখন কিছু খুব ভুল হয়ে গেছে এবং আপনি সম্ভবত একটি ব্যতিক্রম চান।
বাইটেডেভ

1
কেন এই বিস্মৃতকরণ upvated হয়? প্রশ্নটি এনামের একটি মান ব্যবহার করে প্রোগ্রামব্যাটিকভাবে কম্বোবক্সের নির্বাচিত মানটি কীভাবে সেট করবেন The
টাইলার

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;` তবে আপনি যদি কম্বোবক্সের জিনিসগুলি স্ট্রিং করতে চান তবে কম্বোবক্সের কোনও আইটেম "চেয়যোগ্য ভিটামিন পিল" হতে পারে?
বার্লোপ

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পরিবর্তে)। আমি এনাম মান এবং বর্ণনা দুটিই বৈশিষ্ট্যগুলিতে পরিণত করব, তারপরে একটি numberCB.DisplayProperty = "Caption";; যুক্ত করুন এবং numberCB.ValueProperty = "Num"যাতে আপনি SelectedValueসরাসরি ব্যবহার করতে পারেন এবং এটিকে আবদ্ধ করতে পারেন।
আলেজান্দ্রো

আইএমএইচও, সম্ভবত আরও সম্পূর্ণ নমুনা উত্স কোড, যদি খুব বেশি থাকে তবে কোনও অনুসন্ধানে সমস্ত সারি ফিল্টার করতে ব্যবহৃত কম্বোবক্সে "সমস্ত" / "সমস্ত নির্বাচন করুন" বিকল্প যুক্ত করার মতো কার্যকারিতা থাকলে।
কিকিনেট

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;
    }

আপনি কি বোঝাতে চেয়েছেন ? আমি আপনার মন্তব্য বুঝতে পারি না। এই এক্সটেনশন পদ্ধতিটি কাজ করে
মিকি পার্লস্টাইন

এটি যদি আপনার এনাম নম্বরগুলি বা এফএলগুলিকে অনুমতি দেয় তবে তার উপর নির্ভরশীল। যদি তাই হয় আপনি 255 নামক একটি পতাকা যুক্ত করতে পারেন এবং সমস্ত দিয়ে এনাম 1 হিসাবে ফাংশনটি কল করতে পারেন যা ডিফল্ট তৈরি করে। অর্থাত্ কম্বোবক্স 1.ফিলবাইইনুম অর্ডারবাইনেম (মাইইনাম.সকল)
মিকি পার্লস্টাইন

এর মতো যে কোনও বিকল্প: var l = value.OrderBy (x => x.Value) .ToList (); l.Insert (0, "সমস্ত");
কুইকিনেট

আমার এনাম হ'ল এনাম এ {হাঁস = 0, রাজহাঁস = 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
কেন ব্যবহারযোগ্য? আপনি স্পষ্টত castালাই (প্যার্থেসিস কাস্টিং) ব্যবহার করতে পারবেন এবং ব্যবহারযোগ্য নয়
জন দেমেট্রিও

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
}

আইএমএইচও, সম্ভবত আরও সম্পূর্ণ নমুনা উত্স কোড, যদি খুব বেশি থাকে তবে কোনও অনুসন্ধানে সমস্ত সারি ফিল্টার করতে ব্যবহৃত কম্বোবক্সে "সমস্ত" / "সমস্ত নির্বাচন করুন" বিকল্প যুক্ত করার মতো কার্যকারিতা থাকলে।
কিকিনেট


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এটি নাল?


আমি এটি ডিবাগারে পরীক্ষা করতে পারি। আমি এটি ধরে নিয়েছি কারণ সিলেক্ট আইটেমের ধরণটি হ'ল বস্তু, অর্থাত্ একটি রেফারেন্স টাইপ, এবং এনামগুলি মান ধরণের। যদিও আমি সংকলকটি এটি ধরার আশা করতাম।

0

আপনি "ফাইন্ডস্ট্রিং .." ফাংশন ব্যবহার করতে পারেন:

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

আপনি কম্বোবক্সের ডেটাসোর্স হিসাবে কীভালিউয়ার মূল্যগুলির একটি তালিকা ব্যবহার করতে পারেন। আপনার একটি সহায়ক পদ্ধতির প্রয়োজন হবে যেখানে আপনি এনাম প্রকারটি নির্দিষ্ট করতে পারবেন এবং এটি আইমনামেবল> প্রদান করবে যেখানে ইন্টের এনাম এবং স্ট্রিংয়ের মান এনাম মানের হয় um আপনার কম্বোবক্সে, সেট করুন, ডিসপ্লে মেম্বার সম্পত্তিটিকে 'কী' তে এবং ভ্যালুমেম্বরের সম্পত্তি 'মান' তে মান এবং কী হ'ল কীভ্যালিউপিয়ার কাঠামোর সর্বজনীন বৈশিষ্ট্য। তারপরে আপনি যখন সিলেক্ট আইটেম সম্পত্তিটি আপনার মতো এনাম ভ্যালুতে সেট করেন তখন এটি কাজ করা উচিত।


0

এই মুহুর্তে আমি ডাটাসোর্সের চেয়ে আইটেম সম্পত্তিটি ব্যবহার করছি, এর অর্থ হ'ল প্রতিটি এনাম মানের জন্য আমাকে অ্যাড কল করতে হবে, তবে এটি একটি ছোট এনাম এবং যাইহোক তার অস্থায়ী কোড।

তারপরে আমি মান হিসাবে কনভার্ট. টোইন্ট 32 করতে পারি এবং এটি সিলেক্ট ইন্ডেক্সের সাথে সেট করতে পারি।

অস্থায়ী সমাধান, তবে আপাতত 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

ড্রপ ডাউনগুলির জন্য ডেটাসোর্স হিসাবে এনাম সেট করার জন্য জেনেরিক পদ্ধতি

প্রদর্শন নাম হবে। নির্বাচিত মান হ'ল এনাম নিজেই

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;

দ্রষ্টব্য: আমি এই উদাহরণে ডেভএক্সপ্রেস কম্বোবক্স ব্যবহার করি, আপনি উইন ফর্ম কম্বোবক্সেও এটি করতে পারেন


0

এই পার্টিতে কিছুটা দেরি,

SelectedValue.ToString () পদ্ধতিতে প্রদর্শিত নামটি টানতে হবে। তবে এই নিবন্ধটি ডেটাবাইন্ডিং এনুম এবং বিবরণ সহ একটি সহজ উপায় দেখায় যা কেবলমাত্র নয় তবে পরিবর্তে আপনি একটি কাস্টম বিবরণ বৈশিষ্ট্য যুক্ত করতে পারেন এবং আপনি যদি পছন্দ করেন তবে এটি আপনার প্রদর্শিত মানের জন্য ব্যবহার করতে পারেন। খুব সহজ এবং সহজ এবং প্রায় 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;
             }
         }   
     }
 }

কীভাবে ব্যবহার করবেন ... এনাম ঘোষণা করুন

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());
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.