मैं सी#में नौसिखिया हूं। मैंने combobox में कुछ प्रमुख मूल्य युग्म आइटम जोड़े हैं। जब मैंने एप्लिकेशन चलाया, तो उसने मुझे डिफ़ॉल्ट रूप से प्रारंभिक कुंजी और मान दिखाया जो combobox में मौजूद हैं। लेकिन जब मैंने एक और आइटम चुना। मुझे अपवाद मिल रहा है:

Specified Cast is not valid

क्षमा करें मेरी अंग्रेजी के बारे में !! अग्रिम में धन्यवाद।

public void Category_Load()
    {
        Dictionary<int, string> dict = new Dictionary<int, string>();
        dict.Add(-1, "Select");
        dict.Add(0,"CR");
        dict.Add(1,"Analysis");
        dict.Add(2,"Misc");
        comboBox1.DataSource = new BindingSource(dict, null);
        comboBox1.DisplayMember = "Value";
        comboBox1.ValueMember = "Key";
    }
    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {

     string value = ((KeyValuePair<int,string>)comboBox1.SelectedValue).Value.ToString();
        MessageBox.Show("" + value);
        int key = ((KeyValuePair<int, string>)comboBox1.SelectedValue).Key;
        MessageBox.Show("" + key);

    }
0
Vijay Vj 15 जिंदा 2017, 16:03

2 जवाब

SelectedValue चयनित आइटम का मान भाग रखता है। आपका कास्ट अमान्य है क्योंकि SelectedValue एक int (आपके मामले में) लौटाएगा, न कि KeyValuePair<int, string>

SelectedValue प्रॉपर्टी के बजाय SelectedItem प्रॉपर्टी का इस्तेमाल करें।
कुंजी प्राप्त करने के लिए, आप बस SelectedValue का मान int में डाल सकते हैं।

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{

 string value = ((KeyValuePair<int,string>)comboBox1.SelectedItem).Value.ToString();
    MessageBox.Show("" + value);
    int key = (int)comboBox1.SelectedValue;
    MessageBox.Show("" + key);

}
1
Zohar Peled 15 जिंदा 2017, 16:10
लेकिन प्रारंभिक पृष्ठ लोड पर, सिस्टम ने "मान" और "कुंजी" क्यों प्रदर्शित किया।
 – 
Vijay Vj
15 जिंदा 2017, 19:03
क्या होगा यदि मैं कोड को comboBox1.DisplayMember = "Value" में बदल दूं; comboBox1.ValueMember = "मान"; निजी शून्य comboBox1_SelectedIndexChanged (ऑब्जेक्ट प्रेषक, EventArgs e) {स्ट्रिंग मान = ((KeyValuePair)comboBox1.SelectedItem)।Value.ToString (); MessageBox.Show ("" + मान); int key = (int) comboBox1.SelectedValue; MessageBox.Show ("" + कुंजी); }
 – 
Vijay Vj
15 जिंदा 2017, 20:07
प्रारंभिक भार या किसी अन्य भार पर यह चीजों को बारीक रूप से प्रदर्शित करेगा। त्रुटि तब होती है जब आप ValueMember पढ़ रहे होते हैं।
 – 
CodingYoshi
15 जिंदा 2017, 21:14

आपके पास कोड की यह पंक्ति है:

comboBox1.ValueMember = "Key";

कम्बोबॉक्स को निर्देश दे रहा है कि ValueMember Key से जुड़ा है। इसलिए, जब आप combobox की SelectedValue संपत्ति तक पहुंचते हैं, तो यह Key संपत्ति के प्रकार के प्रकार को वापस कर देगा। आपके मामले में वह int होगा। और चूंकि आप एक int को KeyValuePair<int, string> में परिवर्तित कर रहे हैं, स्पष्ट कारणों से, आपको वह अपवाद मिल रहा है।

SelectedValue, ValueMember लौटाता है, इसलिए यह आपके मामले में int लौटाएगा।

SelectedItem पूरी वस्तु लौटाता है इसलिए यह आपके मामले में KeyValuePair<int, string> लौटाएगा।

0
CodingYoshi 15 जिंदा 2017, 16:26