HOWTO · Csharp

Comment obtenir la valeur sélectionnée d'un ComboBox en C#

Apprenez à lire l'élément sélectionné, le texte affiché ou la valeur liée d'un ComboBox Windows Forms en C#.

Sur cette page

Dans un ComboBox Windows Forms, « valeur sélectionnée » peut signifier trois choses différentes : l’objet de l’élément sélectionné, le texte affiché pour cet élément ou sa valeur liée aux données. Lisez ComboBox.SelectedItem lorsque vous avez besoin de l’objet, utilisez ComboBox.GetItemText lorsque vous avez besoin de son texte affiché, et lisez SelectedValue lorsque le contrôle est lié et que vous avez besoin du champ configuré par ValueMember. Ces exemples supposent que le contrôle se trouve déjà sur un formulaire et montrent la sélection lue depuis un gestionnaire de clic de bouton.

Les exemples ci-dessous ciblent une application Windows Forms. Aucune preuve d’exécution au moment de l’exécution n’a été fournie pour cet article, ils sont donc présentés comme des exemples spécifiques à Windows non exécutés ; aucune sortie de console n’est revendiquée.

Utilisez la propriété ComboBox.SelectedItem pour obtenir la valeur sélectionnée d’un ComboBox en C#

ComboBox.SelectedItem est une propriété qui obtient ou définit l’objet actuellement sélectionné dans la liste. Elle ne renvoie pas toujours une chaîne : lorsque les éléments sont des objets personnalisés, le résultat est cet objet. Ne le convertissez en texte que lorsque la représentation sous forme de chaîne de l’élément est ce dont l’application a besoin. L’exemple complet suivant crée un formulaire, sélectionne un élément et lit l’objet actuel lorsque le bouton est cliqué.

using System;
using System.Windows.Forms;

internal static class Program
{
    [STAThread]
    private static void Main()
    {
        ApplicationConfiguration.Initialize();
        var form = new Form();
        var comboBox = new ComboBox { Left = 12, Top = 12, Width = 180 };
        comboBox.Items.AddRange(new object[] { "Red", "Green", "Blue" });
        comboBox.SelectedItem = "Green";
        var button = new Button { Left = 12, Top = 48, Text = "Read selection" };
        button.Click += (sender, args) =>
        {
            object selectedItem = comboBox.SelectedItem;
            string selectedText = Convert.ToString(selectedItem) ?? "";
            MessageBox.Show($"Item: {selectedText}");
        };
        form.Controls.Add(comboBox);
        form.Controls.Add(button);
        Application.Run(form);
    }
}

Dans un formulaire existant, la même opération peut résider dans son gestionnaire de clic : lisez comboBox1.SelectedItem, puis traitez-le selon le type réel de l’élément. Si la liste contient des chaînes, l’élément sélectionné est une chaîne. Si elle contient des objets, convertissez l’objet renvoyé ou appliquez-lui un filtrage par motif avant d’utiliser ses propriétés. Une sélection peut également être absente, donc le code qui s’exécute avant qu’un élément soit sélectionné doit tenir compte du fait que SelectedItem peut être null.

Utilisez ComboBox.GetItemText pour obtenir la valeur sélectionnée d’un ComboBox en C#

ComboBox.GetItemText(item) est une méthode qui renvoie le texte que le contrôle utilise pour afficher l’élément fourni. Appelez-la avec SelectedItem pour obtenir le texte affiché de la sélection actuelle. C’est utile lorsque les éléments sont des objets et que le ComboBox utilise DisplayMember ; appeler ToString() sur l’objet peut produire un texte différent. GetItemText répond à une question d’affichage, tandis que SelectedValue répond à une question de liaison de données.

Pour un ComboBox lié, définissez DisplayMember sur la propriété montrée à l’utilisateur et ValueMember sur la propriété qui identifie l’élément. Récupérez ensuite comboBox1.SelectedValue lorsque l’application a besoin de cette valeur liée. L’exemple montre les deux résultats afin que vous puissiez choisir celui dont votre code a besoin :

using System;
using System.Collections.Generic;
using System.Windows.Forms;

internal sealed class City
{
    public int Id { get; set; }
    public string Name { get; set; } = "";
}

internal static class Program
{
    [STAThread]
    private static void Main()
    {
        ApplicationConfiguration.Initialize();
        var form = new Form();
        var comboBox = new ComboBox { Left = 12, Top = 12, Width = 180 };
        comboBox.DisplayMember = nameof(City.Name);
        comboBox.ValueMember = nameof(City.Id);
        comboBox.DataSource = new List<City>
        {
            new City { Id = 1, Name = "Paris" },
            new City { Id = 2, Name = "Tokyo" }
        };
        comboBox.SelectedValue = 2;
        var button = new Button { Left = 12, Top = 48, Text = "Read selection" };
        button.Click += (sender, args) =>
        {
            string displayedText = comboBox.GetItemText(comboBox.SelectedItem);
            object selectedValue = comboBox.SelectedValue;
            MessageBox.Show($"Text: {displayedText}; value: {selectedValue}");
        };
        form.Controls.Add(comboBox);
        form.Controls.Add(button);
        Application.Run(form);
    }
}

Ici, GetItemText lit le texte d’affichage (par exemple, Tokyo), tandis que SelectedValue lit l’Id lié (par exemple, 2). Utilisez le membre de valeur configuré sur le contrôle plutôt que de traiter le texte d’affichage comme un identifiant. Les deux exemples nécessitent un projet Windows Forms et n’ont pas été exécutés dans l’environnement d’exécution fourni.