2010-07-26 2 views
0

Я хочу использовать comboBox в форме, которая позволяет пользователям выбирать размер пиццы. Я могу заполнить comboBox со строками «маленький», «средний», «большой» и т. Д., Но я хочу связать цену с каждой строкой. Таким образом, «маленький» будет равен 7,99 доллара США, средний - 12,99 и т. Д.Вставка значений в comboBoxes

Итак, как добавить значение к строке в каждом элементе?

Вот то, что я до сих пор:

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); 

     } 

    } 
} 

ответ

2

Наилучшим подходом было бы создать словарь и назначить его в качестве источника данных для выпадающего списка, например:

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"; 
    } 
} 

Таким образом, пользователь видит («Малый», «Средний», «Большой»), но выбранное значение будет двойным, назначенным каждой записи (KeyValuePair).

Edit: То же самое можно сделать с помощью пользовательского класса:

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

Большое спасибо, я дам этот снимок. Должны ли pizzaValues ​​и pizzaChoices одноименное имя? Извините, я новичок в программировании. – Batsu

+0

@ Батсу: да, должен. Небольшая коррекция, которую я только что исправил. :) – rebelliard

0

Создать объект, который оборачивает наименование, цена, и любую другую информацию, которую вы хотите сохранить. Установите TOSTRING этого объекта, чтобы вернуть имя. Затем создайте экземпляры этих объектов и добавьте их в список.

IE:

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

pizzaValues.Add (новый MyStuff {...});

Это дает вам возможность хранить как можно больше информации.