Wie kann ich in C # WinApp den Elementen meiner ComboBox sowohl Text als auch Wert hinzufügen? Ich habe eine Suche durchgeführt und normalerweise verwenden die Antworten "An eine Quelle binden". In meinem Fall ist jedoch keine Bindungsquelle in meinem Programm bereit. Wie kann ich so etwas tun:
combo1.Item[1] = "DisplayText";
combo1.Item[1].Value = "useful Value"
quelle
Sie können eine anonyme Klasse wie folgt verwenden:
UPDATE: Obwohl der obige Code im Kombinationsfeld ordnungsgemäß angezeigt wird, können Sie ihn nicht verwenden
SelectedValue
oderSelectedText
Eigenschaften vonComboBox
. Um diese verwenden zu können, binden Sie das Kombinationsfeld wie folgt:quelle
List<Object> items = new List<Object>();
Dann konnte ich die Methodeitems.Add( new { Text = "report A", Value = "reportA" } );
innerhalb der Schleife verwenden.comboBox.SelectedItem.GetType().GetProperty("Value").GetValue(comboBox.SelectedItem, null)
DataSource
, können Sie dieSelectedValue
oderSelectedText
-Eigenschaften der Combobox verwenden, sodass kein spezielles Casting erforderlich ist.Sie sollten
dynamic
object verwenden, um das Combobox-Element zur Laufzeit aufzulösen.quelle
Sie können
Dictionary
Object verwenden, anstatt eine benutzerdefinierte Klasse zum Hinzufügen von Text und Wert in a zu erstellenCombobox
.Hinzufügen von Schlüsseln und Werten in einem
Dictionary
Objekt:Binden Sie das Quellwörterbuchobjekt an
Combobox
:Schlüssel und Wert abrufen:
Vollständige Quelle: Combobox Text nd Wert
quelle
Dies ist einer der Wege, die mir gerade in den Sinn gekommen sind:
combo1.Items.Add(new ListItem("Text", "Value"))
Und um den Text oder den Wert eines Elements zu ändern, können Sie dies folgendermaßen tun:
In Windows Forms gibt es keine Klasse namens ListItem . Es existiert nur in ASP.NET , daher müssen Sie Ihre eigene Klasse schreiben, bevor Sie es verwenden können, genau wie @Adam Markowitz in seiner Antwort .
Überprüfen Sie auch diese Seiten, sie können helfen:
So fügen Sie einem Kombinationsfeld ein Element hinzu
Gewusst wie: Hinzufügen und Entfernen von Elementen zu einem Windows Forms ComboBox-, ListBox- oder CheckedListBox-Steuerelement
quelle
Ich weiß nicht, ob dies für die im ursprünglichen Beitrag angegebene Situation funktioniert (egal, dass dies zwei Jahre später ist), aber dieses Beispiel funktioniert für mich:
Um Ihren Wert wieder auszulesen, müssen Sie die SelectedItem-Eigenschaft in ein DictionaryEntry-Objekt umwandeln, und Sie können dann die Schlüssel- und Werteigenschaften davon auswerten. Zum Beispiel:
quelle
quelle
Wenn sich noch jemand dafür interessiert, finden Sie hier eine einfache und flexible Klasse für ein Combobox-Element mit einem Text und einem Wert eines beliebigen Typs (sehr ähnlich dem Beispiel von Adam Markowitz):
Die Verwendung von
<T>
ist besser als die Deklaration vonvalue
alsobject
, daobject
Sie dann den Typ verfolgen müssen, den Sie für jedes Element verwendet haben, und ihn in Ihren Code umwandeln müssen, um ihn ordnungsgemäß zu verwenden.Ich benutze es jetzt schon eine ganze Weile für meine Projekte. Es ist wirklich praktisch.
quelle
Ich mochte die Antwort von fab, wollte aber kein Wörterbuch für meine Situation verwenden, also ersetzte ich eine Liste von Tupeln.
quelle
Ein Beispiel mit DataTable:
quelle
Mit diesem Code können Sie einige Elemente in ein Kombinationsfeld mit Text und Wert einfügen.
C #
XAML
quelle
Neben der Antwort von Adam Markowitz gibt es hier eine allgemeine Möglichkeit, die
ItemSource
Werte einer Combobox (relativ) einfach festzulegenenums
, während dem Benutzer das Attribut 'Description' angezeigt wird. (Man könnte meinen, jeder würde dies tun wollen, damit es sich um einen .NET- Einzeiler handelt, aber das ist es einfach nicht, und dies ist der eleganteste Weg, den ich gefunden habe).Erstellen Sie zunächst diese einfache Klasse, um einen beliebigen Enum-Wert in ein ComboBox-Element zu konvertieren:
Zweitens müssen Sie in Ihrem
OnLoad
Ereignishandler festlegen, dass die Quelle Ihres Kombinationsfelds eine Liste ist,ComboEnumItems
die auf jedemEnum
in IhremEnum
Typ basiert . Dies kann mit Linq erreicht werden. Dann stellen Sie einfach Folgendes einDisplayMemberPath
:Jetzt wählt der Benutzer aus einer Liste Ihrer Benutzerfreundlichen aus
Descriptions
, aber was er auswählt, ist derenum
Wert, den Sie im Code verwenden können. Um auf die Auswahl des Benutzers im Code zuzugreifen,comboBoxUserReadable.SelectedItem
wird dasComboEnumItem
undcomboBoxUserReadable.SelectedValue
das seinEMyEnum
.quelle
Sie können einen generischen Typ verwenden:
Beispiel für die Verwendung eines einfachen int-Typs:
quelle
Ich hatte das gleiche Problem. Ich habe einen neuen hinzugefügt, der
ComboBox
nur den Wert im selben Index enthält wie den ersten. Wenn ich dann die Hauptkombination ändere, ändert sich der Index im zweiten Index zur gleichen Zeit, und dann nehme ich den Wert der zweiten Combo und benutze es.Dies ist der Code:
quelle
Klassenerstellung:
Form1-Codes:
quelle
So macht es Visual Studio 2013:
Einzelexemplar:
Mehrere Artikel:
Keine Notwendigkeit, Klassenüberschreibungen durchzuführen oder etwas anderes einzuschließen. Und ja die
comboBox1->SelectedItem
undcomboBox1->SelectedIndex
Anrufe funktionieren noch.quelle
Dies ähnelt einigen anderen Antworten, ist jedoch kompakt und vermeidet die Konvertierung in ein Wörterbuch, wenn Sie bereits eine Liste haben.
Wenn eine
ComboBox
"Combobox" in einem Windows-Formular und eine KlasseSomeClass
mit derstring
type-Eigenschaft angegeben sindName
,Dies bedeutet, dass das SelectedItem ein
SomeClass
Objekt vonlist
ist und jedes Element incombobox
unter seinem Namen angezeigt wird.quelle
DisplayMember
vorher benutzt ... Ich vergesse immer, dass es existiert. Ich habe mich an die Lösung gewöhnt, die ich gefunden habe, bevor ich auf diese Eigenschaft geachtet habe, auch wird es nicht immer helfen. Nicht alle Klassen haben eineName
oderTag
-Eigenschaft oder eine Zeichenfolge-Eigenschaft, die beliebig als Anzeigetext verwendet werden kann.base.Method();
). Außerdem müssten Sie eine abgeleitete Klasse erstellen für jeden unterschiedlichen Typ, den Sie zu Kombinationsfeldern oder Listenfeldern hinzufügen möchten. Die Klasse, die ich gemacht habe, ist flexibel und kann mit jedem Typ ohne zusätzlichen Aufwand verwendet werden. Schauen Sie unten nach meiner Antwort und sagen Sie mir, was Sie denken :)Dies ist eine sehr einfache Lösung für Windows-Formulare, wenn nur der Endwert als (Zeichenfolge) benötigt wird. Die Namen der Elemente werden im Kombinationsfeld angezeigt und der ausgewählte Wert kann leicht verglichen werden.
und im Ereignishandler den Wert (String) des ausgewählten Werts abrufen
quelle
Bessere Lösung hier;
Daten abrufen
quelle