Laden...

ComboBox.Items.add() - keine Values?

Erstellt von _qwer_ vor 15 Jahren Letzter Beitrag vor 15 Jahren 10.675 Views
_
_qwer_ Themenstarter:in
62 Beiträge seit 2008
vor 15 Jahren
ComboBox.Items.add() - keine Values?

Hallo,

gibt es keine Möglichkeit einem Item Werte zuzuweißen? Die Items dienen ja letztendlich nur zur Darstellung.

Gruß,
qwer

2.082 Beiträge seit 2005
vor 15 Jahren

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

_
_qwer_ Themenstarter:in
62 Beiträge seit 2008
vor 15 Jahren

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

2.082 Beiträge seit 2005
vor 15 Jahren

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

_
_qwer_ Themenstarter:in
62 Beiträge seit 2008
vor 15 Jahren

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.

3.430 Beiträge seit 2007
vor 15 Jahren

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

Gelöschter Account
vor 15 Jahren
List<string> myLst = new List<string>();
myLst.add("x");
myLst.add("y");
myLst.add("z");

ComboBox.Items.AddRange(myLst.ToArray()); 
_
_qwer_ Themenstarter:in
62 Beiträge seit 2008
vor 15 Jahren

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;

3.430 Beiträge seit 2007
vor 15 Jahren

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

_
_qwer_ Themenstarter:in
62 Beiträge seit 2008
vor 15 Jahren

ei gut, dann muss ich mich wohl mit dieser unschönen lösung zufrieden geben.

Gelöschter Account
vor 15 Jahren

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.

2.082 Beiträge seit 2005
vor 15 Jahren

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

S
709 Beiträge seit 2005
vor 15 Jahren

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

2.082 Beiträge seit 2005
vor 15 Jahren

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

S
709 Beiträge seit 2005
vor 15 Jahren

Hallo frisch!

Dann würde also der Mensch "Michael19Braun" heißen

Das erspart weitere Fragen ^^.

Viele Grüße,
Simon