C# – ComboBox bez edycji, własne przekazywane wartości

Tworzenie rozwijanej listy elementów. Bez możliwości edycji jej przez użytkownika i przekazywanymi wartościami takimi jakie zadeklaruje administrator.

Domyślna kontrolka ComboBox umożliwia edycję wartości przez użytkownika. Aby to wyłączyć należy w preferencjach w VS zmienić parametr DropDownStyle na DropDownList. Lub w kodzie, podczas tworzenia elementu:

this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;

Najwygodniej by mi było zrobić tak jak jest w HTMLu – w którym podaję co jest przekazywane, co jest widoczne dla użytkownika. Niestety, ale z poziomu VS2008 nie jest to możliwe i trzeba samemu kod dopisać.

Kod ten umieszczamy w głównym pliku projektu.

private class Item
{
public string Name;
public string Value;
public Item(string name, string value)
{
Name = name; Value = value;
}
public override string ToString()
{
// Generates the text shown in the combo box
return Name;
}
}

A w kodzie formy – tuż za inicjalizacją komponentów dodajemy kolejne pozycje jakie maja wystąpić w rozwijanej liście:

comboBox1.Items.Add(new Item("3 dni", "3"));
comboBox1.Items.Add(new Item("5 dni", "5"));
comboBox1.Items.Add(new Item("7 dni", "7"));
comboBox1.Items.Add(new Item("10 dni", "10"));
comboBox1.Items.Add(new Item("14 dni", "14"));

Pierwszy parametr to tekst wyświetlany na ekranie. Drugi to przekazywany w momencie kliknięcia go (choć można też pierwszy przekazywać).

Możemy to zrobić na przykład tak:

Item itm = (Item)comboBox1.SelectedItem;
aukcje1.czasTrwania(itm.Value);