2012-01-17 6 views
2

Je souhaite créer un ComboBox où l'utilisateur peut saisir une valeur entière dans la zone de texte, mais la liste déroulante contient plusieurs valeurs "par défaut". Par exemple, les éléments dans la liste déroulante seraient formatés comme ceci:Sélectionnez un élément dans une liste déroulante et définissez le texte de la liste déroulante sur un autre élément?

  • Par défaut - 0
  • Valeur 1 - 1
  • Valeur 2 - 2

Ce que je veux que lorsque l'utilisateur sélectionne un élément (par exemple "Default - 0"), le texte ComboBox affichera uniquement le nombre "0" plutôt que "Default - 0". Le mot "Default" est juste un texte d'information.

Je joue avec les événements suivants: SelectedIndexChanged, SelectedValueChanged et SelectionChangeCommitted, mais je ne pouvais pas changer le texte de la ComboBox.

private void ModificationCombobox_SelectionChangeCommitted(object sender, EventArgs e) 
{ 
    ComboBox comboBox = (ComboBox)sender; // That cast must not fail. 
    if (comboBox.SelectedIndex != -1) 
    { 
     comboBox.Text = this.values[comboBox.SelectedItem.ToString()].ToString(); // Text is not updated after... 
    } 
} 

Répondre

2

Vous pouvez définir une classe pour votre article ComboBox, puis créez un List<ComboBoxItem> et l'utiliser comme votre Combobox.DataSource. Avec cela, vous pouvez définir ComboBox.DisplayMember à une propriété que vous souhaitez afficher et toujours obtenir référence à votre objet de ComboBox_SelectedIndexChanged():

class ComboboxItem 
{ 
    public int Value { get; set; } 
    public string Description { get; set; } 
} 

public partial class Form1 : Form 
{ 
    List<ComboboxItem> ComboBoxItems = new List<ComboboxItem>(); 
    public Form1() 
    { 
    InitializeComponent(); 
    ComboBoxItems.Add(new ComboboxItem() { Description = "Default = 0", Value = 0 }); 
    ComboBoxItems.Add(new ComboboxItem() { Description = "Value 1 = 1", Value = 1 }); 
    ComboBoxItems.Add(new ComboboxItem() { Description = "Value 2 = 2", Value = 2 }); 
    comboBox1.DataSource = ComboBoxItems; 
    comboBox1.DisplayMember = "Value"; 

    } 

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
    var item = (ComboboxItem)((ComboBox)sender).SelectedItem; 
    var test = string.Format("Description is \'{0}\', Value is \'{1}\'", item.Description, item.Value.ToString()); 
    MessageBox.Show(test); 
    } 
} 

[modifier] Si vous voulez modifier le texte affiché lorsque la boîte toogles entre Etats DROPDOWN essayer ceci: (c'est un concept, pas sûr comment cela se comporterait)

private void comboBox1_DropDown(object sender, EventArgs e) 
    { 
     comboBox1.DisplayMember = "Description"; 
    } 

    private void comboBox1_DropDownClosed(object sender, EventArgs e) 
    { 
     comboBox1.DisplayMember = "Value"; 
    } 
+0

Merci, fonctionne parfaitement avec votre concept! (J'ai modifié votre code pour ajouter le stockage et la restauration de l'élément selectedIndex afin de conserver la modification) –

Questions connexes