webentwicklung-frage-antwort-db.com.de

So erstellen Sie ein Dropdown-Menü in WinForms und C #

Ich bin neu mit Visual Studio/WinForms/C #

Ich versuche, ein einfaches Dropdown-Menü zu erstellen, in dem jeder Wert einen Wert und eine Bezeichnung haben kann.

Dies würde ich in HTML tun, wenn ich eine Web-App erstellen würde. Aber wie kann ich das mit C # und WinForms machen?

<select>
<option value="0">Please select One</option>
<option value="1">The first Options</option>
<option value="2">The Second Options</option>
<option value="3">The Third Options</option>
</select>

Ich habe ComboBox ausprobiert, es scheint jedoch, dass ich keinen Wert und keine Bezeichnung hinzufügen darf und der Benutzer kann immer noch alles eingeben, was er möchte. 

Ich habe eine ListBox ausprobiert, aber das erlaubte mir nicht, value und label ebenfalls zu verwenden.

9
Jaylen

Wenn Sie einen Wert und eine Beschriftung (Beschriftung) wünschen, erstellen Sie eine entsprechende Klasse

class ComboItem
{
    public int ID { get; set; }
    public string Text { get; set; }
}

In der ComboBox setzen Sie dann die DisplayMember-Eigenschaft auf Text und die ValueMember-Eigenschaft auf ID.


Die DropDownStyle der ComboBox bestimmt ihr Verhalten. Mit DropDownStyle.DropDown kann der Benutzer Text eingeben. Mit DropDownStyle.DropDownList kann der Benutzer nur Elemente aus der Liste auswählen.


Sie können die ComboBox folgendermaßen füllen:

myCombo.DataSource = new ComboItem[] {
    new ComboItem{ ID = 1, Text = "One" },
    new ComboItem{ ID = 2, Text = "Two" },
    new ComboItem{ ID = 3, Text = "Three" }
};

Die DataSource kann jede Art von Aufzählung sein.

Sie können die ausgewählte ID auf diese Weise abrufen

int id = (int)myComboBox.SelectedValue;

Beachten Sie, dass Sie der ComboBox beliebige Elemente hinzufügen können. Wenn Sie die Eigenschaften DisplayMember und ValueMember nicht angeben, bestimmt die ComboBox die ToString-Methode des Objekts, um den angezeigten Text zu bestimmen, und Sie können das ausgewählte Element (nicht ausgewählten Wert) über die Eigenschaft SelectedItem abrufen.

Wenn Sie Objekte dieses Typs hinzufügen ...

class Person
{
    public int PersonID { get; set }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public override string ToString()
    {
        return FirstName + " " + LastName;
    }
 }

... an die ComboBox können Sie das ausgewählte Element auf diese Weise abrufen

Person selectedPerson = (Person)myComboBox.SelectedItem;
int personID = selectedPerson.PersonID;

Die ComboBox zeigt den Vor- und Nachnamen der Personen an.

Sie müssen eine Datenquelle für Ihre Combobox festlegen. Es ist besser, wenn Sie eine Klasse erstellen und eine Liste mit Objekten übergeben. Beispiel:

private void Init()
{
    List<Item> items = new List<Item>();
    items.Add(new Item() { Text = "displayText1", Value = "ValueText1" });
    items.Add(new Item() { Text = "displayText2", Value = "ValueText2" });
    items.Add(new Item() { Text = "displayText3", Value = "ValueText3" });

    comboBox1.DataSource = items;
    comboBox1.DisplayMember = "Text";
    comboBox1.ValueMember = "Value";

}

public class Item
{
    public Item() { }

    public string Value { set; get; }
    public string Text { set; get; }
}

Setzen Sie die Init()-Methode in Ihre FormName_Load(object sender, EventArgs e){}.

Es scheint, dass der Wert nur ein Hinweis darauf ist, welches Element ausgewählt wurde, richtig? Dann können Sie den Index der Combobox verwenden, um es viel einfacher zu machen.

Nicht sicher, ob Ihre Artikel vor dem Build bekannt sind. Wenn ja, fügen Sie sie einfach in die Designer-Eigenschaften der Combobox ein. Wenn nicht, können Sie sie dynamisch hinzufügen, indem Sie Folgendes tun:

        List<string> items = new List<string>() { "item1", "item2" };
        comboBox1.DataSource = items;

Und zu wissen, welcher Artikel ausgewählt ist:

        int index = comboBox1.SelectedIndex;
4
CularBytes

ComboBox zeigt die Ergebnisergebnisse des ToString-Aufrufs an, sodass Sie eine Anzeigeklasse definieren können, die den Wert und den Anzeigetext umschließt und der Kombinationsbox hinzufügt.

Das ist:

 public class ItemDisplay<TValue>
 {
     private readonly string m_displayText;

     public ItemDisplay(TValue value, String displayText)
    {
        this.Value = value;
        m_displayText = displayText;
    }

    public TValue Value { get; set; }

    public override string ToString()
    {
        return m_displayText;
    }
}

und fügen Sie Elemente wie folgt in Ihre Combobox ein:

 comboBox1.Items.Add(new ItemDisplay<int>(1, "FirstValue"));
 comboBox1.Items.Add(new ItemDisplay<int>(2, "Second"));
 comboBox1.Items.Add(new ItemDisplay<int>(3, "Third"));
0
idursun