ComboBox: एक आइटम के लिए पाठ और मूल्य जोड़ना (कोई बंधन स्रोत नहीं)


202

C # WinApp में, मैं अपने कॉम्बो बॉक्स के आइटम में टेक्स्ट और वैल्यू दोनों कैसे जोड़ सकता हूँ? मैंने एक खोज की और आमतौर पर उत्तर "बाइंडिंग टू अ सोर्स" का उपयोग कर रहे हैं .. लेकिन मेरे मामले में मेरे पास मेरे कार्यक्रम में एक बाध्यकारी स्रोत तैयार नहीं है ... मैं इस तरह से कुछ कैसे कर सकता हूं:

combo1.Item[1] = "DisplayText";
combo1.Item[1].Value = "useful Value"

जवाबों:


361

आपको अपना स्वयं का वर्ग प्रकार बनाना चाहिए और अपने इच्छित पाठ को वापस करने के लिए ToString () विधि को ओवरराइड करना चाहिए। यहाँ एक वर्ग का एक सरल उदाहरण है जिसका आप उपयोग कर सकते हैं:

public class ComboboxItem
{
    public string Text { get; set; }
    public object Value { get; set; }

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

निम्नलिखित इसके उपयोग का एक सरल उदाहरण है:

private void Test()
{
    ComboboxItem item = new ComboboxItem();
    item.Text = "Item text1";
    item.Value = 12;

    comboBox1.Items.Add(item);

    comboBox1.SelectedIndex = 0;

    MessageBox.Show((comboBox1.SelectedItem as ComboboxItem).Value.ToString());
}

4
क्या हमें वास्तव में इस नए वर्ग ComboboxItem की आवश्यकता है? मुझे लगता है कि एक पहले से ही मौजूद है ListItem कहा जाता है।
अमृत ​​एल्गारि

15
मेरा मानना ​​है कि यह केवल ASP.NET में उपलब्ध हो सकता है और WinForms नहीं।
एडम मार्कविट्ज़

1
नहीं। आइटम एक अलग प्रकार है जो केवल वस्तुओं के डेटा (पाठ, मूल्य, अन्य वस्तुओं के संदर्भ आदि) के भंडारण के लिए उपयोग किया जाता है। यह एक कॉम्बो बॉक्स का वंशज नहीं है और यह अत्यंत दुर्लभ होगा कि यह होगा।
एडम मार्कोविज

1
मुझे पता है कि मुझे पार्टी में कुछ देर हो गई है, लेकिन मैंने यह कैसे किया है कि एक शुद्ध विंडोज़ फॉर्म पर्यावरण में एक डिटैटेबल सेट करने के लिए था, इसमें आइटम जोड़ें, और कॉम्बैट को डिटैटेबल से बाँधें। कोई यह सोचेगा कि ऐसा करने का एक क्लीनर तरीका होना चाहिए, लेकिन मुझे एक नहीं मिला है (डिस्प्लेमेम्बर आपके द्वारा दिखाए जाने वाले टेक्स्ट के लिए इच्छित
कॉम्बोक्स


185
// Bind combobox to dictionary
Dictionary<string, string>test = new Dictionary<string, string>();
        test.Add("1", "dfdfdf");
        test.Add("2", "dfdfdf");
        test.Add("3", "dfdfdf");
        comboBox1.DataSource = new BindingSource(test, null);
        comboBox1.DisplayMember = "Value";
        comboBox1.ValueMember = "Key";

// Get combobox selection (in handler)
string value = ((KeyValuePair<string, string>)comboBox1.SelectedItem).Value;

2
सही काम करता है और यह चयनित उत्तर होना चाहिए। लेकिन क्या हम कास्टिंग के बजाय comboBox1.SelectedText का उपयोग नहीं कर सकते हैं। SlectedItem और take .Value?
जेफरी ने

@ फ़ैब आपको कॉम्बोक्स में एक निश्चित कुंजी के साथ आइटम कैसे मिलता है
स्मिथ 21

क्या शब्दकोश कुंजी के आधार पर कॉम्बोक्स में किसी आइटम का चयन करना संभव है? जैसे की 3 का चयन करें इसलिए की 3 के साथ आइटम का चयन किया जाएगा।
Dror

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

119

आप इस तरह गुमनाम वर्ग का उपयोग कर सकते हैं:

comboBox.DisplayMember = "Text";
comboBox.ValueMember = "Value";

comboBox.Items.Add(new { Text = "report A", Value = "reportA" });
comboBox.Items.Add(new { Text = "report B", Value = "reportB" });
comboBox.Items.Add(new { Text = "report C", Value = "reportC" });
comboBox.Items.Add(new { Text = "report D", Value = "reportD" });
comboBox.Items.Add(new { Text = "report E", Value = "reportE" });

अद्यतन: यद्यपि उपरोक्त कोड कॉम्बो बॉक्स में ठीक से प्रदर्शित होगा, आप उपयोग नहीं कर पाएंगे SelectedValueया इसके SelectedTextगुण नहीं होंगे ComboBox। उन का उपयोग करने में सक्षम होने के लिए, नीचे कॉम्बो बॉक्स को बांधें:

comboBox.DisplayMember = "Text";
comboBox.ValueMember = "Value";

var items = new[] { 
    new { Text = "report A", Value = "reportA" }, 
    new { Text = "report B", Value = "reportB" }, 
    new { Text = "report C", Value = "reportC" },
    new { Text = "report D", Value = "reportD" },
    new { Text = "report E", Value = "reportE" }
};

comboBox.DataSource = items;

14
मैं इसे थोड़ा संशोधित करना चाहूंगा क्योंकि एक प्रोग्रामर को इसके लिए लूप की आवश्यकता है। एक सरणी के बजाय मैंने एक सूची का उपयोग किया List<Object> items = new List<Object>(); तब मैं items.Add( new { Text = "report A", Value = "reportA" } );लूप के भीतर विधि का उपयोग करने में सक्षम था ।
एंड्रयू

1
एंड्रयू, क्या आपको SelectValue संपत्ति के साथ काम करने के लिए सूची <ऑब्जेक्ट> मिला?
पीटर पिटॉक

@ वेंकट,comboBox.SelectedItem.GetType().GetProperty("Value").GetValue(comboBox.SelectedItem, null)
ऑप्टावियस

2
@ वेंकट अगर आप दूसरे समाधान का उपयोग करते हैं जो DataSourceआप सेट करते हैं SelectedValueया आप कॉम्बोक्स के SelectedTextगुणों का उपयोग कर सकते हैं , तो कोई विशेष कास्टिंग करने की आवश्यकता नहीं है।
JPProgrammer

32

dynamicरन-टाइम में कॉम्बोक्स आइटम को हल करने के लिए आपको ऑब्जेक्ट का उपयोग करना चाहिए ।

comboBox.DisplayMember = "Text";
comboBox.ValueMember = "Value";

comboBox.Items.Add(new { Text = "Text", Value = "Value" });

(comboBox.SelectedItem as dynamic).Value

1
यह एक अलग वर्ग बनाने और ToString () को ओवरराइड करने से बहुत बेहतर है।
बजे डॉन श्राउट

1
गतिशील केवल C # 4 और उच्चतर में उपलब्ध है। (.NET 4.5 मुझे लगता है)
मिकीफैगैन_बाहरExitOfSO

लिखने के लिए सरल और तेज! मैंने VB.net में सिलेक्टवैल्यू के लिए यह किया है: डिम वैल्यू ऐस स्ट्रिंग = CType (Me.SectionIDToComboBox.SelectedItem, ऑब्जेक्ट) ।Value
मम्बो

1
फिर, "मान" का उपयोग करके सही कॉम्बो बॉक्स आइटम कैसे सेट करें?
डेव लुडविग

17

आप Dictionaryटेक्स्ट और मान को जोड़ने के लिए एक कस्टम क्लास बनाने के बजाय ऑब्जेक्ट का उपयोग कर सकते हैं Combobox

Dictionaryऑब्जेक्ट में कुंजियाँ और मान जोड़ें :

Dictionary<string, string> comboSource = new Dictionary<string, string>();
comboSource.Add("1", "Sunday");
comboSource.Add("2", "Monday");

स्रोत शब्दकोश ऑब्जेक्ट को इस पर बाँधें Combobox:

comboBox1.DataSource = new BindingSource(comboSource, null);
comboBox1.DisplayMember = "Value";
comboBox1.ValueMember = "Key";

कुंजी और मूल्य प्राप्त करें:

string key = ((KeyValuePair<string,string>)comboBox1.SelectedItem).Key;
string value = ((KeyValuePair<string,string>)comboBox1.SelectedItem).Value;

पूर्ण स्रोत: कॉम्बोबॉक्स टेक्स्ट एनडी वैल्यू


14

यह उन तरीकों में से एक है जो सिर्फ दिमाग में आए:

combo1.Items.Add(new ListItem("Text", "Value"))

और किसी वस्तु के मूल्य या पाठ को बदलने के लिए, आप इसे इस तरह से कर सकते हैं:

combo1.Items[0].Text = 'new Text';

combo1.Items[0].Value = 'new Value';

Windows Forms में ListItem नाम की कोई क्लास नहीं है । यह केवल ASP.NET में मौजूद है , इसलिए आपको इसका उपयोग करने से पहले अपनी स्वयं की कक्षा लिखने की आवश्यकता होगी, जैसा कि @Adam Markowitz ने अपने उत्तर में किया था ।

इन पृष्ठों की भी जाँच करें, वे मदद कर सकते हैं:


2
जब तक मैं गलत नहीं हूँ, ListItem केवल ASP.NET में उपलब्ध है
एडम Markowitz

हां :( दुर्भाग्य से यह केवल ASP.net में है ... तो अब मैं क्या कर सकता हूं?
Bohn

फिर कॉम्बोक्स में सिलेक्टवैल्यू या सिलेक्टेड प्रॉपर्टीज का क्या मतलब है?
JSON

11

पता नहीं कि यह मूल पद में दी गई स्थिति के लिए काम करेगा (इस तथ्य पर कभी ध्यान न दें कि यह दो साल बाद है), लेकिन यह उदाहरण मेरे लिए काम करता है:

Hashtable htImageTypes = new Hashtable();
htImageTypes.Add("JPEG", "*.jpg");
htImageTypes.Add("GIF", "*.gif");
htImageTypes.Add("BMP", "*.bmp");

foreach (DictionaryEntry ImageType in htImageTypes)
{
    cmbImageType.Items.Add(ImageType);
}
cmbImageType.DisplayMember = "key";
cmbImageType.ValueMember = "value";

अपने मूल्य को वापस पढ़ने के लिए, आपको SelectItem को एक DictionaryEntry ऑब्जेक्ट में डालना होगा, और फिर आप उस की कुंजी और मान गुणों का मूल्यांकन कर सकते हैं। उदाहरण के लिए:

DictionaryEntry deImgType = (DictionaryEntry)cmbImageType.SelectedItem;
MessageBox.Show(deImgType.Key + ": " + deImgType.Value);

7
//set 
comboBox1.DisplayMember = "Value"; 
//to add 
comboBox1.Items.Add(new KeyValuePair("2", "This text is displayed")); 
//to access the 'tag' property 
string tag = ((KeyValuePair< string, string >)comboBox1.SelectedItem).Key; 
MessageBox.Show(tag);

5

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

public class ComboBoxItem<T>
{
    public string Name;
    public T value = default(T);

    public ComboBoxItem(string Name, T value)
    {
        this.Name = Name;
        this.value = value;
    }

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

का उपयोग करते हुए <T>घोषित करने से बेहतर है valueएक के रूप में object, क्योंकि के साथ objectआप तो आप किस प्रकार प्रत्येक आइटम के लिए प्रयोग किया जाता है का ट्रैक रखने के लिए है चाहते हैं, और इसे अपने कोड में डाली इसे ठीक से उपयोग करने के लिए।

मैं काफी समय से अपनी परियोजनाओं पर इसका उपयोग कर रहा हूं। यह वास्तव में आसान है।


4

मुझे फैब का जवाब पसंद आया लेकिन मैं अपनी स्थिति के लिए एक शब्दकोश का उपयोग नहीं करना चाहता था इसलिए मैंने टुपल्स की एक सूची दी।

// set up your data
public static List<Tuple<string, string>> List = new List<Tuple<string, string>>
{
  new Tuple<string, string>("Item1", "Item2")
}

// bind to the combo box
comboBox.DataSource = new BindingSource(List, null);
comboBox.ValueMember = "Item1";
comboBox.DisplayMember = "Item2";

//Get selected value
string value = ((Tuple<string, string>)queryList.SelectedItem).Item1;

3

DataTable का उपयोग करके एक उदाहरण:

DataTable dtblDataSource = new DataTable();
dtblDataSource.Columns.Add("DisplayMember");
dtblDataSource.Columns.Add("ValueMember");
dtblDataSource.Columns.Add("AdditionalInfo");

dtblDataSource.Rows.Add("Item 1", 1, "something useful 1");
dtblDataSource.Rows.Add("Item 2", 2, "something useful 2");
dtblDataSource.Rows.Add("Item 3", 3, "something useful 3");

combo1.Items.Clear();
combo1.DataSource = dtblDataSource;
combo1.DisplayMember = "DisplayMember";
combo1.ValueMember = "ValueMember";

   //Get additional info
   foreach (DataRowView drv in combo1.Items)
   {
         string strAdditionalInfo = drv["AdditionalInfo"].ToString();
   }

   //Get additional info for selected item
    string strAdditionalInfo = (combo1.SelectedItem as DataRowView)["AdditionalInfo"].ToString();

   //Get selected value
   string strSelectedValue = combo1.SelectedValue.ToString();

3

आप इस कोड का उपयोग टेक्स्ट और मूल्य के साथ कुछ वस्तुओं को कॉम्बो बॉक्स में डालने के लिए कर सकते हैं।

सी#

private void ComboBox_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
{
    combox.Items.Insert(0, "Copenhagen");
    combox.Items.Insert(1, "Tokyo");
    combox.Items.Insert(2, "Japan");
    combox.Items.Insert(0, "India");   
}

XAML

<ComboBox x:Name="combox" SelectionChanged="ComboBox_SelectionChanged_1"/>

कृपया अपना समाधान बताएं।
वैभव बजाज

सीधे शब्दों में, निम्नलिखित देशों को अपने संबंधित अनुक्रमितों में एक कॉम्बोक्स में जोड़ें। जब आप इसे चलाते हैं। एक विकल्प के साथ एक कॉम्बोक्स दिखाई देता है जो 0 इंडेक्स पर होता है। यदि आप कॉम्बोक्स पर क्लिक करते हैं तो दूसरा निम्न विकल्प दिखाई देगा
मुहम्मद अहमद

यह आईडी के लिए काम नहीं करता है यह केवल सूची को अनुक्रमित करने का एक तरीका है, यही वह सवाल नहीं है जिसके बारे में
श्री हीलिस

2

एडम मार्कोविट के जवाब के आगे, यहाँ (अपेक्षाकृत) का एक सामान्य उद्देश्य तरीका है, बस उपयोगकर्ता को 'विवरण' विशेषता दिखाते हुए ItemSourceकॉम्बोक्स के मूल्यों को निर्धारित करना enums। (आपको लगता है कि हर कोई ऐसा करना चाहेगा। यह एक .NET लाइनर होगा, लेकिन यह सिर्फ नहीं है, और यह सबसे सुंदर तरीका है जो मैंने पाया है)।

सबसे पहले, किसी भी Enum मान को कॉम्बो बॉक्स आइटम में परिवर्तित करने के लिए यह सरल वर्ग बनाएं:

public class ComboEnumItem {
    public string Text { get; set; }
    public object Value { get; set; }

    public ComboEnumItem(Enum originalEnum)
    {
        this.Value = originalEnum;
        this.Text = this.ToString();
    }

    public string ToString()
    {
        FieldInfo field = Value.GetType().GetField(Value.ToString());
        DescriptionAttribute attribute = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) as DescriptionAttribute;
        return attribute == null ? Value.ToString() : attribute.Description;
    }
}

दूसरे, आपके OnLoadईवेंट हैंडलर में, आपको अपने कॉम्बो बॉक्स के स्रोत को अपने प्रकार के ComboEnumItemsप्रत्येक पर आधारित सूची के रूप में सेट करने की आवश्यकता है । यह Linq के साथ हासिल किया जा सकता है। फिर बस सेट करें :EnumEnumDisplayMemberPath

    void OnLoad(object sender, RoutedEventArgs e)
    {
        comboBoxUserReadable.ItemsSource = Enum.GetValues(typeof(EMyEnum))
                        .Cast<EMyEnum>()
                        .Select(v => new ComboEnumItem(v))
                        .ToList();

        comboBoxUserReadable.DisplayMemberPath = "Text";
        comboBoxUserReadable.SelectedValuePath= "Value";
    }

अब उपयोगकर्ता आपके उपयोगकर्ता के अनुकूल की एक सूची से Descriptionsचयन करेगा, लेकिन वे जो चुनते हैं उसका enumमूल्य होगा जो आप कोड में उपयोग कर सकते हैं। कोड में उपयोगकर्ता के चयन का उपयोग करने के लिए, comboBoxUserReadable.SelectedItemहोगा ComboEnumItemऔर comboBoxUserReadable.SelectedValueहोगा EMyEnum


1

आप एक सामान्य प्रकार का उपयोग कर सकते हैं:

public class ComboBoxItem<T>
{
    private string Text { get; set; }
    public T Value { get; set; }

    public override string ToString()
    {
        return Text;
    }

    public ComboBoxItem(string text, T value)
    {
        Text = text;
        Value = value;
    }
}

सरल इंट-टाइप का उपयोग करने का उदाहरण:

private void Fill(ComboBox comboBox)
    {
        comboBox.Items.Clear();
        object[] list =
            {
                new ComboBoxItem<int>("Architekt", 1),
                new ComboBoxItem<int>("Bauträger", 2),
                new ComboBoxItem<int>("Fachbetrieb/Installateur", 3),
                new ComboBoxItem<int>("GC-Haus", 5),
                new ComboBoxItem<int>("Ingenieur-/Planungsbüro", 9),
                new ComboBoxItem<int>("Wowi", 17),
                new ComboBoxItem<int>("Endverbraucher", 19)
            };

        comboBox.Items.AddRange(list);
    }

0

मुझे एक ही समस्या थी, मैंने जो किया था ComboBox, उसी सूचकांक में पहले मान के साथ एक नया जोड़ा गया था, फिर पहला, और फिर जब मैं प्रिंसिपल कॉम्बो को एक ही समय में दूसरे एक बदलाव में सूचकांक में बदल देता हूं, तो मैं मान लेता हूं दूसरे कॉम्बो का उपयोग करें और इसका उपयोग करें।

यह कोड है:

public Form1()
{
    eventos = cliente.GetEventsTypes(usuario);

    foreach (EventNo no in eventos)
    {
        cboEventos.Items.Add(no.eventno.ToString() + "--" +no.description.ToString());
        cboEventos2.Items.Add(no.eventno.ToString());
    }
}

private void lista_SelectedIndexChanged(object sender, EventArgs e)
{
    lista2.Items.Add(lista.SelectedItem.ToString());
}

private void cboEventos_SelectedIndexChanged(object sender, EventArgs e)
{
    cboEventos2.SelectedIndex = cboEventos.SelectedIndex;
}

0

वर्ग प्राणी:

namespace WindowsFormsApplication1
{
    class select
    {
        public string Text { get; set; }
        public string Value { get; set; }
    }
}

फॉर्म 1 कोड:

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            List<select> sl = new List<select>();
            sl.Add(new select() { Text = "", Value = "" });
            sl.Add(new select() { Text = "AAA", Value = "aa" });
            sl.Add(new select() { Text = "BBB", Value = "bb" });
            comboBox1.DataSource = sl;
            comboBox1.DisplayMember = "Text";
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

            select sl1 = comboBox1.SelectedItem as select;
            t1.Text = Convert.ToString(sl1.Value);

        }

    }
}

0

दृश्य स्टूडियो 2013 में ऐसा ही होता है:

एक चीज:

comboBox1->Items->AddRange(gcnew cli::array< System::Object^  >(1) { L"Combo Item 1" });

कई आइटम:

comboBox1->Items->AddRange(gcnew cli::array< System::Object^  >(3)
{
    L"Combo Item 1",
    L"Combo Item 2",
    L"Combo Item 3"
});

क्लास ओवरराइड करने या कुछ और शामिल करने की आवश्यकता नहीं है। और हाँ comboBox1->SelectedItemऔर comboBox1->SelectedIndexकॉल अभी भी काम करते हैं।


0

यह कुछ अन्य उत्तरों के समान है, लेकिन यदि आपके पास पहले से ही सूची है, तो यह कॉम्पैक्ट है और शब्दकोश में रूपांतरण से बचता है।

ComboBoxखिड़कियों के रूप में "कॉम्बोक्स" और प्रकार की संपत्ति वाले एक वर्ग SomeClassको देखते हुए ,stringName

List<SomeClass> list = new List<SomeClass>();

combobox.DisplayMember = "Name";
combobox.DataSource = list;

जिसका अर्थ है कि SelectItem एक SomeClassऑब्जेक्ट है list, और प्रत्येक आइटम को comboboxउसके नाम का उपयोग करके प्रदर्शित किया जाएगा।


सच! मैंने DisplayMemberपहले भी इस्तेमाल किया है ... मैं हमेशा भूल जाता हूं कि यह मौजूद है। इस संपत्ति पर ध्यान देने से पहले मुझे जो समाधान मिला, उसकी मुझे आदत हो गई, यह भी हमेशा मदद नहीं करेगा। नहीं सभी वर्गों एक है Nameया Tagसंपत्ति, या एक स्ट्रिंग संपत्ति है कि एक प्रदर्शन पाठ के रूप में मनमाने ढंग से इस्तेमाल किया जा सकता है।
मैथ्यूस रोचा

यह लाभप्रद है। यदि आप कक्षा को संशोधित कर सकते हैं, तो कक्षा में ऐसी संपत्ति को जोड़ने के लिए इसके लायक हो सकता है, उदाहरण के लिए एक संपत्ति 'कॉम्बो बॉक्सटेक्स्ट' (जो उपलब्ध होने पर ToString () विधि वापस कर सकती है)। वैकल्पिक रूप से, यदि वर्ग परिवर्तनीय नहीं है, तो एक व्युत्पन्न वर्ग बनाना संभव हो सकता है जिसमें 'ComboBoxText' संपत्ति को लागू किया जा सकता है। यह केवल इसके लायक होगा यदि आपको कई बार क्लास को कॉम्बो बॉक्स में जोड़ना होगा। अन्यथा, इसका सरल केवल एक शब्दकोश का उपयोग करना है जैसा कि अन्य उत्तरों में से एक में समझाया गया है।
एलेक्स स्मिथ

हे एलेक्स, मैंने उन मामलों में नैतिकता के साथ एक उत्तर दिया है जो मैं आमतौर पर इन मामलों में उपयोग करता हूं। मुझे लगता है कि आपने जो कहा है, उसके बहुत करीब है और शायद मैंने यह नहीं समझा कि आपने क्या कहा। मैंने कक्षा से व्युत्पन्न नहीं किया क्योंकि कुछ वर्गों को आपको उन तरीकों को लागू करने की आवश्यकता हो सकती है जिन्हें हम ओवरराइड नहीं करना चाहते हैं (इसलिए हमारे पास एक सरल तरीके से तरीकों का एक गुच्छा होगा base.Method();), आपको एक व्युत्पन्न वर्ग भी बनाना होगा। प्रत्येक भिन्न प्रकार के लिए जिसे आप कॉम्बो बॉक्स या सूची बॉक्स में जोड़ना चाहते हैं। मेरे द्वारा बनाई गई कक्षा लचीली है, आप बिना किसी अतिरिक्त प्रयास के किसी भी प्रकार का उपयोग कर सकते हैं। मेरे जवाब के लिए नीचे देखें, और मुझे बताएं कि आप क्या सोचते हैं :)
मथियस रोचा

मैं सहमत हूं, आपका उत्तर निश्चित रूप से प्रत्येक वर्ग के लिए एक व्युत्पन्न वर्ग बनाने की तुलना में अधिक सुविधाजनक लगता है जिसे आप एक कॉम्बोक्स में जोड़ना चाहते हैं। अच्छी नौकरी! मुझे लगता है कि भविष्य में अगर मेरे पास 'नाम' जैसी कोई संपत्ति नहीं है, तो आसानी से उपलब्ध है, मैं आपके उत्तर या शब्दकोश उत्तर की तरह कुछ का उपयोग करने जा रहा हूं :)
एलेक्स स्मिथ

0

यह विंडोज़ के रूपों के लिए एक बहुत ही सरल उपाय है यदि सभी की आवश्यकता एक (स्ट्रिंग) के रूप में अंतिम मूल्य है। आइटम के नाम कॉम्बो बॉक्स पर प्रदर्शित किए जाएंगे और चयनित मूल्य की तुलना आसानी से की जा सकती है।

List<string> items = new List<string>();

// populate list with test strings
for (int i = 0; i < 100; i++)
            items.Add(i.ToString());

// set data source
testComboBox.DataSource = items;

और ईवेंट हैंडलर को चयनित मूल्य का मान (स्ट्रिंग) मिलता है

string test = testComboBox.SelectedValue.ToString();

0

यहां बेहतर समाधान;

Dictionary<int, string> userListDictionary = new Dictionary<int, string>();
        foreach (var user in users)
        {
            userListDictionary.Add(user.Id,user.Name);
        }

        cmbUser.DataSource = new BindingSource(userListDictionary, null);
        cmbUser.DisplayMember = "Value";
        cmbUser.ValueMember = "Key";

पुनर्प्राप्त डेटा

MessageBox.Show(cmbUser.SelectedValue.ToString());

जब मैं कॉम्बोक्स को भरने में सक्षम था, तो उस पर क्लिक करने से वीएस २०१ ९ में यह त्रुटि उत्पन्न होती है। एक क्वेरी इन्टरफेस कॉल को COM के प्रबंधित इंटरफ़ेस के क्लास इंटरफेस के लिए अनुरोध किया गया था जो कि ComboBoxUiaProvider
MC9000
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.