2015-09-23 5 views
12

के रूप में KeyValuePair की सूची के साथ कॉम्बोबॉक्स के लिए प्रारंभिक रूप से चयनित मान का चयन करना मैं KeyValuePair<int, string> के List से एक combobox बना रहा हूं। अब तक यह मुझे संख्यात्मक आईडी लौटने के दौरान उपयोगकर्ता को वर्णनात्मक नाम देने में बहुत अच्छा काम कर रहा है।
हालांकि, जो भी मैं कोशिश करता हूं, मैं प्रारंभ में चयनित मूल्य चुनने में सक्षम नहीं हूं।डेटावोर्स

public StartUpForm() 
{ 
    InitializeComponent(); 

    FlowLayoutPanel flowLayout = new FlowLayoutPanel(); //This is necessary to protect the table, which is for some reason collapsing... 
    flowLayout.FlowDirection = FlowDirection.TopDown; 
    flowLayout.AutoSize = true; 
    flowLayout.AutoSizeMode = AutoSizeMode.GrowAndShrink; 

    var comboBox = new ComboBox(); 

    { 
     var choices = new List<KeyValuePair<int, string>>(); 
     choices.Add(new KeyValuePair<int, string>(1, "hello")); 
     choices.Add(new KeyValuePair<int, string>(2, "world")); 
     comboBox.DataSource = choices; 
     comboBox.ValueMember = "Key"; 
     comboBox.DisplayMember = "Value"; 
     flowLayout.Controls.Add(comboBox); 
    } 
    Controls.Add(flowLayout); 

    //None of these work: 
    comboBox.SelectedValue = 2; 
    comboBox.SelectedValue = 2.ToString(); 
    comboBox.SelectedValue = new KeyValuePair<int, string>(2, "world"); 
    comboBox.SelectedValue = "world"; 
    comboBox.SelectedItem = 2; 
    comboBox.SelectedItem = 2.ToString(); 
    comboBox.SelectedItem = new KeyValuePair<int, string>(2, "world"); 
    comboBox.SelectedItem = "world"; 

    return; 
} 

परिणाम हमेशा एक ही है:

enter image description here

मैं एक ComboBox डेटास्रोत एक List<KeyValuePair<int, string>> के रूप में प्रयोग में शुरू में चयनित मान का चुनाव कैसे कर सकते हैं?

उत्तर

8

बाइंडिंग निर्माता के अंदर बहुत अच्छी तरह से काम नहीं करता है, तो प्रपत्र गुंजाइश के लिए ComboBox घोषणा ले जाने का प्रयास और OnLoad ओवरराइड का उपयोग करके देखें:

ComboBox comboBox = new ComboBox(); 

protected override void OnLoad(EventArgs e) { 
    comboBox.SelectedValue = 2; 
    base.OnLoad(e); 
} 
+0

शानदार, यह काम करता है! धन्यवाद! एक सवाल: इसे कैसे जानना चाहिए? – Antonio

+0

@ एंटोनियो एक ही समस्या थी। । । साल और साल पहले। – LarsTech

0

आप बंधन क्यों प्रयोग कर रहे हैं?

public class ComboItem 
{ 
    public int Key {get; set;} 
    public string Text {get; set;} 
    public override string ToString() 
    { 
     return this.Text; 
    } 
} 

public void OnFormLoad(object Sender, ...) 
{ 
    IEnumerable<ComboItem> comboItems = CreateListComboItems(); 
    this.ComboBox1.Items.Clear(); 
    foreach (var comboitem in comboItems) 
    { 
     this.comboBox1.Items.Add(comboItem); 
    } 
} 

बता गया घटना की सदस्यता लें SelectedIndexChanged:

private void OnComboSelectedIndexChanged(object sender, EventArgs e) 
{ 
    ComboItem selectedItem = (ComboItem)this.comboBox1.SelectedItem; 
    ProcessSelectedKey(selectedItem.Key); 
} 

परिशिष्ट नहीं यह स्ट्रिंग पाठ को दिखाने के पूर्णांक और स्ट्रिंग गुण और ओवरराइड ToString() के साथ एक वर्ग बनाने के लिए आसान होगा : मैं प्रारंभ में चयनित मूल्य चुनने में सक्षम नहीं हूं।

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

हालांकि संपत्ति कॉम्बोबॉक्स.इटम्स कॉम्बोबॉक्स चयन का प्रकार है, यह आईन्यूमेरेबल लागू करता है, जिसका अर्थ है कि आप इसे कॉम्बोइटम के अनुक्रम में डालने के लिए एन्यूमेरबल.कास्ट() का उपयोग कर सकते हैं। अगर वहाँ अनुरोधित कुंजी के साथ एक ComboItem है खोजने के लिए LINQ का उपयोग करें और चुनें पहले ComboItem पाया, या चुन सकते हैं या कुछ भी नहीं का चयन करते हैं वहाँ इस कुंजी

// selects the combobox item with key == value 
private void SelectComboItem(int value) 
{ 
    this.comboBox1.SelectedItem = 
     this.ComboBox1.Items.Cast<ComboItem>() 
      .FirstOrDefault(comboItem => comboItem.Key == value); 
} 

कोड के साथ कोई ComboItem में आइटम का संग्रह मिल जाएगा है कॉम्बो बॉक्स (जिसे हम जानते हैं कॉम्बोइटम्स का अनुक्रम है), इसलिए हम सभी वस्तुओं को कॉम्बोइटम में डाल सकते हैं। फिर हम पहले कॉम्बोइटम को खोजने का प्रयास करते हैं जिसमें कुंजी के बराबर कुंजी होती है। अगर ऐसा कोई कॉम्बोइटम नहीं है तो शून्य वापस लौटें। अंत में इसे चयनित आइटम बनाएं। शून्य का एक मूल्य कुछ भी चुनने के लिए इंगित करता है

+1

क्यों पहिया reinventing? – Antonio

+0

आपका मतलब है कि पुन: उपयोग पैटर्न क्यों काम करने के लिए साबित हुए हैं? खैर (1) उपयोग में आसानी, (2) अपनी कक्षा के भविष्य के परिवर्तनों के लिए समझ में आसानी, (3) परिवर्तन की आसानी, उदाहरण के लिए यदि भविष्य में हमें एक –

+0

की बजाय दो महत्वपूर्ण मानों की आवश्यकता है तो आपके संकेत के लिए धन्यवाद। मुझे यह कहना होगा कि यह मेरे प्रश्न को संबोधित नहीं करता है, जो प्रारंभिक रूप से चयनित मूल्य चुनने के बारे में है। – Antonio