2010-07-26 3 views
0

Je souhaite utiliser un comboBox sous une forme qui permet aux utilisateurs de sélectionner la taille de la pizza. Je peux remplir la comboBox avec les chaînes "small", "Medium", "Large", etc., mais je veux associer un prix à chaque chaîne. Donc, un "petit" serait 7,99 $, le support serait 12,99 etc.Insertion de valeurs dans les comboBoxes

Alors, comment ajouter une valeur à la chaîne dans chaque élément?

Voici ce que j'ai jusqu'à présent:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace fff 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 

      InitializeComponent(); 
      comboBox1.Items.Add("Small"); 
      comboBox1.Items.Add("Medium"); 
      comboBox1.Items.Add("Large"); 
      comboBox1.Items.Add("Extra Large"); 


      comboBox2.Items.Add("East End location"); 
      comboBox2.Items.Add("West End location"); 
      comboBox2.Items.Add("South End location"); 
      comboBox2.Items.Add("Downtown location"); 
      comboBox2.Items.Add("North End location"); 

     } 

     private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
     { 


     } 

     private void label2_Click(object sender, EventArgs e) 
     { 

     } 

     private void label7_Click(object sender, EventArgs e) 
     { 

     } 

     private void submit_btn_Click(object sender, EventArgs e) 

     { 
      if (comboBox1.SelectedIndex == 0) 
       MessageBox.Show(small); 

     } 

    } 
} 

Répondre

2

La meilleure approche serait de créer un dictionnaire et l'assigner comme source de données pour le combobox, comme:

using System; 
using System.Collections.Generic; 

class Program 
{ 
    private void SetValues() 
    { 
     var pizzaChoices = new Dictionary<string, double>(); 
     pizzaChoices.Add("Small", 6.99); 
     pizzaChoices.Add("Medium", 8.99); 
     pizzaChoices.Add("Large", 11.99); 

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

De cette façon, l'utilisateur voit ("Small", "Medium", "Large") mais la valeur sélectionnée sera le double attribué à chaque entrée (KeyValuePair).

Edit: La même chose pourrait être fait en utilisant une classe personnalisée:

public class Choices 
{ 
    public string Name { get; set; } 
    public double Price { get; set; } 
} 

class Program 
{ 
    private void SetValues(Choices choices) 
    { 
     var list = new List<Choices>(choices); 
     comboBox1.DataSource = list; 
     comboBox1.ValueMember = "Price"; 
     comboBox1.DisplayMember = "Name"; 
    } 
} 
+0

Merci beaucoup, je vais essayer. Est-ce que pizzaValues ​​et pizzaChoices doivent avoir le même nom? Désolé, je suis nouveau à la programmation. – Batsu

+0

@Batsu: oui, le devrait. Correction mineure que je viens de corriger. :) – rebelliard

0

Créer un objet qui enveloppe le nom, le prix et toute autre information que vous souhaitez stocker. Définissez le TOSTRING de cet objet pour renvoyer le nom. Ensuite, créez des instances de ces objets et ajoutez-les à la liste.

IE:

public class MyStuff{ 
    public string Name {get;set;} 
    public double Price {get;set;} 
    public override ToString() { return this.Name; } 
    } 

pizzaValues.Add (nouveau MyStuff {...});

Cela vous donne la possibilité de stocker autant d'informations que vous voulez

Questions connexes