2011-06-28 19 views
10

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

+1

WPF, WinForms, Silverlight या ASP.NET है? –

+0

कुछ टैग जोड़ें जो आप उपयोग कर रहे हैं, जैसे डैनियल हिल्गार्थ ने ऊपर कहा था। –

+0

क्या आप _windows form_ एप्लिकेशन पर काम कर रहे हैं ?? –

उत्तर

0

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

ListBox x = new ListBox(); 
x.Items.Add(new ListItem("Hello", "1")); 
x.Items.Add(new ListItem("Bye", "2")); 

Console.Write(x.Items[0].Value); 
+5

जहां तक ​​मुझे पता है, 'ListBox.Items' प्रकार' System.Windows.Forms.ListBox.ObjectCollection' का अर्थ है जिसका अर्थ है 'ListBox.Items [अनुक्रमणिका]' एक ऑब्जेक्ट है जिसमें वैल्यू प्रॉपर्टी नहीं है !! –

+1

यह वेबफॉर्म के लिए एक जवाब था, क्योंकि वह सेटिंग टेक्स्ट और वैल्यू का जिक्र कर रहा है, जिसने मुझे वेबफॉर्म मान लिया, न कि WinForms। – DaveShaw

1

मान लीजिए आप पहले आइटम के मूल्य चाहते हैं।

ListBox list = new ListBox(); 
Console.Write(list.Items[0].Value); 
3

आप एक विंडोज़ रूपों पर काम कर रहे हैं, तो परियोजना आप निम्नलिखित की कोशिश कर सकते हैं:

ListBoxKeyValuePair के रूप में वस्तुओं के लिए आइटम जोड़ें:

listBox.Items.Add(new KeyValuePair(key, value); 

उसके बाद आप उन्हें पुनः प्राप्त करने में सक्षम हो जाएगा निम्न तरीका:

KeyValuePair keyValuePair = listBox.Items[index]; 
var value = keyValuePair.Value; 
+0

मैंने कोशिश की लेकिन यह काम नहीं किया :( – tzam

+0

@tzam: क्या आप _windows form_ application पर काम कर रहे हैं ?? –

+0

यह सही है अक्रम – tzam

3

मैं एक बांध का उपयोग कर रहा हूँ इसके पीछे एक SqlDataReader के साथ ingSource और मेरे लिए उपरोक्त में से कोई भी काम नहीं करता है। माइक्रोसॉफ्ट के लिए

प्रश्न: क्यों यह काम करता है:

? lst.SelectedValue 

लेकिन यह नहीं करता है?

? ((System.Data.Common.DbDataRecord)_bsBlocks[80])["BlockKey"] 

अब जब कि सिर्फ है:

? lst.Items[80].Value 

मैं मैं, BindingSource वस्तु को वापस जाने के लिए एक System.Data.Common.DbDataRecord के रूप में यह डाली, और उसके बाद अपने स्तंभ नाम का उल्लेख है लगता है हास्यास्पद।

+0

वैकल्पिक रूप से मुझे लगता है कि मैं आइटम संग्रह के माध्यम से पुन: प्रयास कर सकता हूं, प्रत्येक आइटम का चयन कर सकता हूं और फिर चयनित वैल्यू प्राप्त कर सकता हूं। लेकिन मुझे ऐसा करने की ज़रूरत नहीं है, और यह किसी भी तरह की कड़वाहट है। –

+0

' 'ListBox' का आइटम संग्रह संग्रह ऑब्जेक्ट का है और इसमें 'Value' प्रॉपर्टी नहीं है। आइटम' DataRowView' हो सकता है, एक जटिल वस्तु या प्राथमिक प्रकार। मान को 'ValueMember' प्रॉपर्टी का उपयोग करके गणना की जानी चाहिए, वैसे ही' चयनित वैल्यू 'काम करता है। –

8

यह होगा

String MyStr = ListBox.items[5].ToString(); 
+0

आइटम 'DataRowView' या कॉम्प्लेक्स ऑब्जेक्ट या अन्य प्रकार हो सकते हैं। किसी आइटम के अंतर्निहित मूल्य को 'ValueMember' पर आधार की गणना की जानी चाहिए। –

5

यहाँ मैं इस प्रश्न के लिए एक भी सही उत्तर (WinForms टैग में) नहीं देख सकते हैं और यह इस तरह बार-बार प्रश्न के लिए अजीब बात है।

ListBox नियंत्रण के आइटम DataRowView, कॉम्प्लेक्स ऑब्जेक्ट्स, बेनामी प्रकार, प्राथमिक प्रकार और अन्य प्रकार हो सकते हैं। किसी आइटम के अंतर्निहित मूल्य की गणना ValueMember पर की जानी चाहिए।

ListBox नियंत्रण में GetItemText है जो आइटम के रूप में जोड़े गए ऑब्जेक्ट के प्रकार के बावजूद आइटम टेक्स्ट प्राप्त करने में आपकी सहायता करता है। इसे वास्तव में GetItemValue विधि की आवश्यकता है।

GetItemValue एक्सटेंशन विधि

हम बना सकते हैं GetItemValueextension method आइटम मूल्य जो GetItemText तरह काम करता है पाने के लिए:

using System; 
using System.Windows.Forms; 
using System.ComponentModel; 
public static class ListControlExtensions 
{ 
    public static object GetItemValue(this ListControl list, object item) 
    { 
     if (item == null) 
      throw new ArgumentNullException("item"); 

     if (string.IsNullOrEmpty(list.ValueMember)) 
      return item; 

     var property = TypeDescriptor.GetProperties(item)[list.ValueMember]; 
     if (property == null) 
      throw new ArgumentException(
       string.Format("item doesn't contain '{0}' property or column.", 
       list.ValueMember)); 
     return property.GetValue(item); 
    } 
} 

विधि से ऊपर का उपयोग करके आप ListBox और यह की सेटिंग के बारे में चिंता करने की जरूरत नहीं एक आइटम के लिए अपेक्षित Value वापस आ जाएगा।यह List<T>, Array, ArrayList, DataTable, बेनामी प्रकारों की सूची, प्राथमिक प्रकारों की सूची और अन्य सभी सूचियों के साथ काम करता है जिनका आप डेटा स्रोत के रूप में उपयोग कर सकते हैं। ।

//Gets underlying value at index 2 based on settings 
this.listBox1.GetItemValue(this.listBox1.Items[2]); 

हम बनाया एक विस्तार विधि, जब आप विधि का उपयोग करना चाहते हैं, मत भूलना नाम स्थान है जो आप में वर्ग डाल शामिल करने के लिए के रूप में GetItemValue विधि के बाद से

: यहाँ उपयोग का एक उदाहरण है

यह विधि ComboBox और CheckedListBox पर भी लागू होती है।

0

बस कोशिश यह लिस्टबॉक्स अपनी सूची है और यू सूचकांक 0 पर मूल्य जो करने के लिए एक veriable आवंटित किया जाएगा

string yu = listBox1.Items[0].ToString(); 
MessageBox.Show(yu); 
संबंधित मुद्दे