HOWTO · Csharp

So rufen Sie den ausgewählten Wert einer ComboBox in C# ab

Erfahren Sie, wie Sie das ausgewählte Element, den angezeigten Text oder den gebundenen Wert aus einer Windows Forms ComboBox in C# auslesen.

Auf dieser Seite

Bei einer Windows Forms ComboBox kann „ausgewählter Wert“ drei verschiedene Dinge bedeuten: das ausgewählte Elementobjekt, den für dieses Element angezeigten Text oder seinen datengebundenen Wert. Lesen Sie ComboBox.SelectedItem, wenn Sie das Objekt benötigen, verwenden Sie ComboBox.GetItemText, wenn Sie den angezeigten Text benötigen, und lesen Sie SelectedValue, wenn das Steuerelement gebunden ist und Sie das durch ValueMember konfigurierte Feld benötigen. Diese Beispiele setzen voraus, dass sich das Steuerelement bereits auf einem Formular befindet, und zeigen, wie die Auswahl aus einem Klick-Handler einer Schaltfläche gelesen wird.

Die folgenden Beispiele zielen auf eine Windows Forms-Anwendung. Für diesen Artikel wurde kein Ausführungsnachweis zur Laufzeit mitgeliefert, daher werden sie als nicht ausgeführte, Windows-spezifische Beispiele präsentiert; es wird keine Konsolenausgabe behauptet.

Verwenden Sie die Eigenschaft ComboBox.SelectedItem, um den ausgewählten Wert einer ComboBox in C# abzurufen

ComboBox.SelectedItem ist eine Eigenschaft, die das aktuell ausgewählte Objekt in der Liste abruft oder festlegt. Sie gibt nicht immer eine Zeichenfolge zurück: Wenn die Elemente benutzerdefinierte Objekte sind, ist das Ergebnis dieses Objekt. Wandeln Sie es nur dann in Text um, wenn die Zeichenfolgendarstellung des Elements das ist, was die Anwendung benötigt. Das folgende vollständige Beispiel erstellt ein Formular, wählt ein Element aus und liest das aktuelle Objekt, wenn auf die Schaltfläche geklickt wird.

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

In einem vorhandenen Formular kann dieselbe Operation in seinem Klick-Handler stehen: Lesen Sie comboBox1.SelectedItem und verarbeiten Sie es dann entsprechend dem tatsächlichen Typ des Elements. Enthält die Liste Zeichenfolgen, ist das ausgewählte Element eine Zeichenfolge. Enthält sie Objekte, wandeln Sie das zurückgegebene Objekt um oder gleichen Sie es per Musterabgleich ab, bevor Sie seine Eigenschaften verwenden. Eine Auswahl kann auch fehlen, daher sollte Code, der ausgeführt wird, bevor ein Element ausgewählt wurde, berücksichtigen, dass SelectedItem null sein kann.

Verwenden Sie ComboBox.GetItemText, um den ausgewählten Wert einer Combobox in C# zu erhalten

ComboBox.GetItemText(item) ist eine Methode, die den Text zurückgibt, den das Steuerelement zur Anzeige des übergebenen Elements verwendet. Rufen Sie sie mit SelectedItem auf, um den angezeigten Text der aktuellen Auswahl zu erhalten. Dies ist nützlich, wenn die Elemente Objekte sind und die ComboBox DisplayMember verwendet; der Aufruf von ToString() für das Objekt kann einen anderen Text erzeugen. GetItemText beantwortet eine Anzeigefrage, während SelectedValue eine Datenbindungsfrage beantwortet.

Legen Sie bei einer gebundenen ComboBox DisplayMember auf die dem Benutzer angezeigte Eigenschaft und ValueMember auf die Eigenschaft fest, die das Element identifiziert. Rufen Sie dann comboBox1.SelectedValue ab, wenn die Anwendung diesen gebundenen Wert benötigt. Das Beispiel zeigt beide Ergebnisse, damit Sie das für Ihren Code benötigte auswählen können:

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

Hier liest GetItemText den Anzeigetext (zum Beispiel Tokyo), während SelectedValue die gebundene Id (zum Beispiel 2) liest. Verwenden Sie das am Steuerelement konfigurierte Wertmitglied, anstatt den Anzeigetext als Bezeichner zu behandeln. Beide Beispiele erfordern ein Windows Forms-Projekt und wurden in der mitgelieferten Laufzeitumgebung nicht ausgeführt.