2017-09-13 1 views
0

alors j'ai un Combo Box et j'ai une liste faite en utilisant un KeyValuePair<int, decimal>. Je souhaite que la zone de texte que j'ai sélectionnée affiche la valeur en fonction de la clé lorsque je la sélectionne dans la zone de texte déroulante.La zone de texte n'affiche pas la valeur après avoir sélectionné dans ComboBox Dropdown

Code pertinent:

// Make a list of truck weight and MPG. 
List<KeyValuePair<int, decimal>> weightMPG = new List<KeyValuePair<int, decimal>>(); 

private void mainForm_Load(object sender, EventArgs e) 
{ 
    decimal k = 7; 
    for (int i = 20000; i < 40000; i+=1000){ 
     weightMPG.Add(new KeyValuePair<int, decimal>(i, k)); 
     k -= 0.1m; 
    } 
    for (int i = 40000; i < 45000; i+=1000){ 
     weightMPG.Add(new KeyValuePair<int, decimal>(i, 5)); 
    } 
    weightMPG.Add(new KeyValuePair<int, decimal>(46000, 4.9m)); 
    weightMPG.Add(new KeyValuePair<int, decimal>(47000, 4.8m)); 
    weightMPG.Add(new KeyValuePair<int, decimal>(48000, 4.7m)); 
    truckWeight2.DataSource = weightMPG; 
    truckWeight2.ValueMember = "Value"; 
    truckWeight2.DisplayMember = "Key"; 
} 

private void truckWeight2_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    truckMPG2.Text = truckWeight2.ValueMember; 
} 

Pour ce code, il affiche un menu déroulant de 20 000 à 48 000 lorsque je clique sur le contrôle. Toutefois, lorsque j'en sélectionne un, la zone de texte (truckMPG2) ne se met pas à jour pour refléter la valeur, mais affiche simplement le mot "Valeur".

J'ai regardé d'autres réponses de débordement de pile en faisant ce code, donc je ne suis pas sûr où je vais mal.

Répondre

4

Vous lisez la propriété .ValueMember:

truckMPG2.Text = truckWeight2.ValueMember; 

que vous définissez spécifiquement à une chaîne littérale:

truckWeight2.ValueMember = "Value"; 

On dirait que vous voulez que la propriété au lieu .SelectedValue:

truckMPG2.Text = truckWeight2.SelectedValue; 

Ou, si le type ne correspond pas mais que la valeur peut être représenté directement sous forme de chaîne, vous devrez peut-être ajouter à la valeur .ToString():

truckMPG2.Text = truckWeight2.SelectedValue.ToString(); 
+0

Peut-être que ça va éclaircir, mais je veux essentiellement la zone de texte pour afficher le nombre décimal correspondant. par exemple. 20 000 -> 7; 21,000-> 6,9 etc. Je ne suis pas sûr pourquoi j'ai mis le ValueMember à la valeur, j'essayais juste des trucs des réponses de SO. – Annabelle

+0

@Annabelle: Attendez, lorsque vous définissez '.ValueMember' à' "Value" ', la liste n'affiche-t-elle pas les valeurs correctes? Quel est le '.SelectedValue' lorsque vous modifiez une sélection? Ne copiez pas/collez le code à partir des réponses Stack Overflow. Spécifiquement écrire des instructions qui effectuent les opérations que vous voulez effectuer. Si vous n'êtes pas sûr de ce que fait une instruction donnée, recherchez la documentation et expérimentez-la dans votre débogueur pour voir ce qu'elle fait. – David

+0

La liste elle-même affiche les membres corrects (clés). Cependant la zone de texte où je veux la valeur (par exemple le 7, 6.9 .. etc) affiche simplement le mot "Valeur". aussi en utilisant '.SelectedValue;' Je reçois simplement une erreur de conversion. – Annabelle