Hallo,
gibt es keine Möglichkeit einem Item Werte zuzuweißen? Die Items dienen ja letztendlich nur zur Darstellung.
Gruß,
qwer
Hallo qwer,
Property DisplayMember und ValueMember.
Einfach als ValueMember den Namen der Property angeben, der als Wert dienen soll.
Bsp:
Klasse Mensch
Properties Haarfarbe, Name, Groesse
Mensch m = new Mensch();
//Eigenschaften setzen...
comboBox.Items.Add(m);
comboBox.DisplayMember = "Name";
comboBox.ValueMember = "Haarfarbe";
Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de
danke für die schnelle antwort!
die eigentschaft valueMember hatte ich auch gefunden, problem ist hier allerdings das diese nur strings annehmen kann. was ist aber wenn ich eine liste zuweisen möchte?
gruß,
qwer
was ist aber wenn ich eine liste zuweisen möchte? Ich verstehe deine Frage nicht.
Du kannst als ValueMember den Property-Namen des hinzugefügten Objekts verwenden. Später kannst du dann SelectedValue entsprechend Casten.
Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de
ok, ein codebeispiel sagt evtl. mehr als worte...
List<string> myLst = new List<string>();
myLst.add("x");
myLst.add("y");
myLst.add("z");
ComboBox.ValueMember = myLst;
das würde ich gerne realisieren können.
Nö, so kannst du das nicht machen.
Mit ValueMember und DisplayMember gibt man du die Variablen an, die dafür verwendet werden soll.
hier ein kleines CodeBeispiel
//Diese Methode muss in die Klasse deines Forms
public void FillComboBox()
{
Mensch m = new Mensch();
m.Name= "Michael";
m.Alter = 19;
m.Haarfarbe = "Braun";
comboBox.Items.Add(m);
comboBox.DisplayMember = "Name";
comboBox.ValueMember = "Haarfarbe";
}
public class Mensch
{
public string Name;
public int Alter;
public string Haarfarbe;
}
Aber das hat dir ja eigentlich schon Frisch erklärt.
Gruss
Michael
hi JAck30lena,
evtl. hast du mich falsch verstanden. ich möchte nicht mehrer items auf einen schlag hinzufügen, sondern für ein hinzugefügtes item mehrere values.
vielleicht verdeutlicht sich dieses beispiel eher:
List<string> myLst = new List<string>();
myLst.add("x");
myLst.add("y");
myLst.add("z");
ComboBox.items.add("listenItem in ComboBox (also der Bezeichner)");
// und zu dem gerade hinzugefügtem item, möchte ich mehrer values setzen:
ComboBox.ValueMember = myLst;
Hi,
evtl. hast du mich falsch verstanden. ich möchte nicht mehrer items auf einen schlag hinzufügen, sondern für ein hinzugefügtes item mehrer values.
Das wurde doch schon mehrmals beschrieben (von Frisch und Mir).
Erstelle eine Klasse die die Eigenschaften enthält und füge diese der ComboBox hinzu. Über DisplayMember kannst du dann die Eigenschaft angeben, die angezeigt werden soll.
Gruss
Michael
ei gut, dann muss ich mich wohl mit dieser unschönen lösung zufrieden geben.
die combobox kann immer nur einen wert pro zeile anzeigen...
was du machen könntest, wäre noch die lösung mit der klasse und dann noch:
public class Mensch
{
public string Name;
public int Alter;
public string Haarfarbe;
public string FullDescription
{
get{ return Name + " " + Alter + " " + Haarfarbe;}
}
}
dannach noch den displaymember auf "FullDescription" setzen und fertig.
dann muss ich mich wohl mit dieser unschönen lösung zufrieden geben Was hindert dich daran, eigene Items hinzuzufügen und die dann mittels SelectedItem zurückzucasten?
Person p = new Person();
//Eigenschaften von Person setzen...
comboBox.Items.Add(p);
private void comboBox_SelectedItem_Changed(object sender, EventArgs e) {
Person selected = comboBox.SelectedItem as Person;
if(selected != null) {
//Mit den Eigenschaften der Person arbeiten...
}
}
Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de
Folgendes würde auch noch gehen:
Beispiel (basierend auf michlGs Sourcecode)
//Diese Methode muss in die Klasse deines Forms
public void FillComboBox()
{
Mensch m = new Mensch();
m.Name= "Michael";
m.Alter = 19;
m.Haarfarbe = "Braun";
comboBox.Items.Add(m);
}
public class Mensch
{
public string Name;
public int Alter;
public string Haarfarbe;
public override string ToString()
{
// Abändern so wie du es brauchst
return Name + Alter.ToString() + Haarfarbe;
}
}
So, jetzt hast die Qual der Wahl.
Viele Grüße,
Simon
Ich finde das Casten des Items trotzdem am elegantesten 🙂
@SimonKnight6600:
Dann würde also der Mensch "Michael19Braun" heißen 😁
Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de
Hallo frisch!
Dann würde also der Mensch "Michael19Braun" heißen
Das erspart weitere Fragen ^^.
Viele Grüße,
Simon