Viele Leute haben die Frage beantwortet, wie eine Aufzählung in WinForms an ein Kombinationsfeld gebunden werden kann. Es ist wie folgt:
comboBox1.DataSource = Enum.GetValues(typeof(MyEnum));
Aber das ist ziemlich nutzlos, ohne den tatsächlichen Wert für die Anzeige einstellen zu können.
Ich habe versucht:
comboBox1.SelectedItem = MyEnum.Something; // Does not work. SelectedItem remains null
Ich habe auch versucht:
comboBox1.SelectedIndex = Convert.ToInt32(MyEnum.Something); // ArgumentOutOfRangeException, SelectedIndex remains -1
Hat jemand Ideen, wie das geht?
SelectedValue
verursacht einInvalidOperationException
für mich. "Kann dasSelectedValue
in a nichtListControl
mit einem leeren setzenValueMember
."Antworten:
Die Aufzählung
Festlegen der Dropdown-Werte
Abrufen der Aufzählung aus dem ausgewählten Element
quelle
Vereinfachen:
Initialisieren Sie zuerst diesen Befehl: (zB nach
InitalizeComponent()
)So rufen Sie das ausgewählte Element in der Combobox ab:
Wenn Sie einen Wert für die Combobox festlegen möchten:
quelle
Der Code
Ist in Ordnung, muss das Problem in der Datenbindung liegen. DataBinding-Zuweisungen erfolgen nach dem Konstruktor, hauptsächlich beim ersten Anzeigen der Combobox. Versuchen Sie, den Wert im Load-Ereignis festzulegen. Fügen Sie beispielsweise diesen Code hinzu:
Und prüfen Sie, ob es funktioniert.
quelle
Versuchen:
EDITS:
Hoppla, das hast du schon versucht. Es hat jedoch bei mir funktioniert, als meine ComboBox auf DropDownList eingestellt war.
Hier ist mein vollständiger Code, der für mich funktioniert (sowohl mit DropDown als auch mit DropDownList):
quelle
Angenommen, Sie haben die folgende Aufzählung
Sie benötigen eine Struktur, um diese Werte einer Zeichenfolge zuzuordnen:
Geben Sie nun ein Array von Objekten mit allen Aufzählungen zurück, die einer Zeichenfolge zugeordnet sind:
Verwenden Sie Folgendes, um Ihr Kombinationsfeld zu füllen:
Erstellen Sie eine Funktion, um den Aufzählungstyp abzurufen, falls Sie ihn an eine Funktion übergeben möchten
und dann solltest du ok sein :)
quelle
Tuple
stattdessen). Ich würde sowohl den Enum-Wert als auch die Beschreibung in Eigenschaften umwandeln und dann einnumberCB.DisplayProperty = "Caption"
; ` hinzufügen ,numberCB.ValueProperty = "Num"
damit Sie esSelectedValue
direkt verwenden und daran binden können.Versuche dies:
StoreObject ist mein Objektbeispiel mit der StoreObjectMyEnumField-Eigenschaft für den Store MyEnum-Wert.
quelle
quelle
Dies ist die Lösung zum Laden von Enum-Elementen in die Combobox:
Verwenden Sie dann das Aufzählungselement als Text:
quelle
Basierend auf der Antwort von @Amir Shenouda komme ich zu folgendem Ergebnis:
Enums Definition:
Festlegen der Dropdown-Werte daraus:
Abrufen der Aufzählung aus dem ausgewählten Element:
quelle
quelle
Vollständige Quelle ... Eine Aufzählung an Combobox binden
quelle
Ich verwende die folgende Hilfsmethode, die Sie an Ihre Liste binden können.
quelle
Konvertieren Sie die Aufzählung in eine Liste von Zeichenfolgen und fügen Sie diese der ComboBox hinzu
Stellen Sie den angezeigten Wert mit selectedItem ein
quelle
Keines davon funktionierte für mich, aber das tat es (und es hatte den zusätzlichen Vorteil, eine bessere Beschreibung für den Namen jeder Aufzählung zu haben). Ich bin mir nicht sicher, ob es an .net-Updates liegt oder nicht, aber ich denke, dies ist der beste Weg. Sie müssen einen Verweis hinzufügen auf:
using System.ComponentModel;
Wenn Sie dann auf die Daten zugreifen möchten, verwenden Sie diese beiden Zeilen:
quelle
Dies wird wahrscheinlich nie unter all den anderen Antworten zu sehen sein, aber dies ist der Code, den ich mir ausgedacht habe. Dies hat den Vorteil, dass ich den verwende
DescriptionAttribute
falls vorhanden, verwendet wird, ansonsten aber der Name des Aufzählungswerts selbst.Ich habe ein Wörterbuch verwendet, weil es ein fertiges Schlüssel- / Wertelementmuster enthält. EIN
List<KeyValuePair<string,object>>
würde auch funktionieren und ohne unnötiges Hashing, aber ein Wörterbuch sorgt für saubereren Code.Ich bekomme Mitglieder, die ein
MemberType
von habenField
und die buchstäblich sind. Dadurch wird eine Folge von nur Mitgliedern erstellt, die Aufzählungswerte sind. Dies ist robust, da eine Aufzählung keine anderen Felder haben kann.quelle
sollte gut funktionieren ... Wie können Sie feststellen, dass
SelectedItem
das null ist?quelle
Sie können die Funktionen "FindString .." verwenden:
quelle
Sie können eine Liste von KeyValuePair-Werten als Datenquelle für die Combobox verwenden. Sie benötigen eine Hilfsmethode, mit der Sie den Aufzählungstyp angeben können. Sie gibt IEnumerable> zurück, wobei int der Wert von enum und string der Name des Aufzählungswerts ist. Setzen Sie in Ihrer Combobox die DisplayMember-Eigenschaft auf 'Key' und die ValueMember-Eigenschaft auf 'Value'. Wert und Schlüssel sind öffentliche Eigenschaften der KeyValuePair-Struktur. Wenn Sie dann die SelectedItem-Eigenschaft wie Sie auf einen Aufzählungswert setzen, sollte dies funktionieren.
quelle
Im Moment verwende ich die Items-Eigenschaft anstelle der DataSource. Dies bedeutet, dass ich Add für jeden Aufzählungswert aufrufen muss, aber es ist eine kleine Aufzählung und der temporäre Code trotzdem.
Dann kann ich einfach Convert.ToInt32 für den Wert ausführen und ihn mit SelectedIndex festlegen.
Temporäre Lösung, aber YAGNI vorerst.
Prost auf die Ideen, ich werde sie wahrscheinlich verwenden, wenn ich die richtige Version mache, nachdem ich eine Runde Kundenfeedback erhalten habe.
quelle
Alte Frage vielleicht hier, aber ich hatte das Problem und die Lösung war einfach und unkompliziert. Ich fand diese http://www.c-sharpcorner.com/UploadFile/mahesh/1220/
Es nutzt die Datenerfassung und funktioniert gut, also probieren Sie es aus.
quelle
Beide Arbeiten für mich sind Sie sicher, dass nichts anderes falsch ist?
quelle
enum MyEnum { Something = 47 }
Generische Methode zum Festlegen einer Aufzählung als Datenquelle für Dropdowns
Anzeige wäre Name. Der ausgewählte Wert wäre Enum selbst
quelle
Das war immer ein Problem. Wenn Sie eine sortierte Aufzählung haben, wie von 0 bis ...
Sie können Namen an die Combobox binden und stattdessen die Verwendung von
.SelectedValue
Eigenschaften verwenden.SelectedIndex
und das
quelle
In Framework 4 können Sie den folgenden Code verwenden:
So binden Sie die MultiColumnMode-Enumeration an die Combobox, zum Beispiel:
und um den ausgewählten Index zu erhalten:
Hinweis: In diesem Beispiel verwende ich die DevExpress-Combobox. Sie können dies auch in der Win Form Combobox tun
quelle
Ein bisschen spät zu dieser Party,
Die SelectedValue.ToString () -Methode sollte den DisplayedName abrufen. Dieser Artikel DataBinding Enum und auch With Descriptions zeigt jedoch eine praktische Möglichkeit, dies nicht nur zu haben, sondern Sie können der Enum stattdessen ein benutzerdefiniertes Beschreibungsattribut hinzufügen und es für Ihren angezeigten Wert verwenden, wenn Sie dies bevorzugen. Sehr einfach und leicht und ungefähr 15 Codezeilen (es sei denn, Sie zählen die geschweiften Klammern) für alles.
Es ist ein ziemlich raffinierter Code und Sie können ihn zu einer Erweiterungsmethode zum Booten machen ...
quelle
Verwenden Sie Casting nur so:
quelle
Sie können eine Erweiterungsmethode verwenden
Wie man ... Enum deklariert
Diese Methode zeigt die Beschreibung in Kombinationsfeldelementen an
quelle
Das hat bei mir funktioniert:
quelle